$ in不在环回中工作

时间:2016-09-01 08:55:55

标签: arrays node.js mongodb

我有一个字符串数组如下:

['57b69c9d4ae615ef0e312af6','57b69bf477b8e5cd0eb38c88'];

我将其转换为ObjectId,如下所示:

var objectIds = [];
  for(var i=0; i<expenseIds.length; i++){
    var _id = new ObjectId(expenseIds[i]);
    objectIds.push(_id);
  }

的ObjectID:

[ 57b69c9d4ae615ef0e312af6, 57b69bf477b8e5cd0eb38c88 ]

现在我在mongoDb中使用$in查询来获取所有详细信息,如下所示:

app.models.xxxxx.find({"_id" : {"$in" : objectIds}}, function(err, res){
    if(err){

    } else {
      console.log(res);
    }
  });

但它不是过滤。收集xxxxx中的所有文件都在返回..请分享您的想法。提前谢谢。

编辑: 当我在mongo shell中运行命令时:

db.xxx.find({ _id: { '$in': [ 57b69c9d4ae615ef0e312af6, 57b69bf477b8e5cd0eb38c88 ] }});

它抛出错误:

SyntaxError: identifier starts immediately after numeric literal @(shell):1:35

2 个答案:

答案 0 :(得分:1)

您需要为模型启用allowExtendedOperators

//model.json
...
"options": {
    "validateUpsert": true,
    "mongodb": {
      ...
      "allowExtendedOperators": true
    }
  },
...

<强>更新

您的过滤器也存在问题。

app.models.xxxxx.find({where: {"_id" : {"$in" : objectIds}}}, function(err, res){
    if(err){

    } else {
      console.log(res);
    }
  });

您还使用内置运算符:

app.models.xxxxx.find({where: {id : {inq : objectIds}}}, function(err, res){
        if(err){

        } else {
          console.log(res);
        }
      });

答案 1 :(得分:1)

如果您使用 mongoose ,请尝试此

var objectIds = [];
for(var i=0; i<expenseIds.length; i++){
var _id =  mongoose.Types.ObjectId(expenseIds[i]);
objectIds.push(_id);
}

或者只是你可以使用MongoDb

来做到这一点
var ObjectId = require('mongodb').ObjectID;
var objectIds = [];
for(var i=0; i<expenseIds.length; i++){
var _id =  ObjectId(expenseIds[i]);
objectIds.push(_id);
}

如果这可以解决您的问题,请告诉我