mongoose中的"$in"有什么问题?

9

大家好。我在使用mongoose时遇到了一个奇怪的错误。

module.js:437
  var compiledWrapper = runInThisContext(wrapper, filename, tru
                        ^
SyntaxError: Unexpected token .
    at Module._compile (module.js:437:25)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (E:\Dropbox\Dropbox\FCP\server.js
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)

我猜这是从哪里开始的。
dbQueries.remove({_id: {$in: {req.body.data}}, authorId: req.user._id}, function onRemoveSomething(err){
            if(err) {
                res.json({epicFail: 'ERR_RestrictedAccess'});
                return; 
            }
        });

所以,我不知道出了什么问题。
3个回答

37

$in需要传递一个数组,而不是格式无效的JavaScript对象。

{_id: {$in: [req.body.data]}

如果req.body.data已经是一个数组,那么不需要加上包裹的[]


Holly syncasis... 非常感谢。 - Roman
1
经过几次 Node 重启后,使用 {_id: {$in: req.body.data}} 就可以正常工作。 - Roman
@andy-ray 当req.body.data只有一个元素时该怎么做?基本上,req.body.data的内容可以是单个元素或数组是要求,我正在使用in运算符。我应该如何处理这种情况? - godimedia
1
为什么这个答案被赞了这么多?有没有一些教程列出了原始问题中的错误语法? - Andy Ray
请停止给这个答案点赞。 - Andy Ray

0

根据数据构建您的查询

var match = {
    authorId: req.user._id
};

if(Array.isArray(data)) {
    match._id = {$in: data};
} else {
   match._id = data;
}

dbQueries.remove(match, function findMyDocs(err, foundDocs) {

});

0

你需要检查 req.body.data 是否为一个数组,可以参考以下代码:{_id: {$in: _.isArray(req.body.data) ? req.body.data : [req.body.data] } //const _ = require('lodash');


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接