2017-01-03 58 views
1

我有这样的MongoDB的查询汇总查询:如何执行与WHERE条件

var array=[]; //some string values 

collection.aggregate(
    { $match: { '_id': { $in : array } } } 
) 

但这并不返回任何结果。我如何执行此操作?

+1

你缺少括号。正确的语法是collection.aggregate([{$ match:{'_id':{$ in:array}}}])。有关详细信息,请参见https://docs.mongodb.com/v3.2/aggregation/ – felix

+1

使用ObjectID值代替 – Sammaye

+0

它不能与[] – arunraj414

回答

0

正如在评论中指出,您的array变量是十六进制字符串数组值ex :["57f36e94517f72bc09ee761e"]和蒙戈贝壳,你需要先投那些字符串值ObjectId秒。使用JavaScript map() 方法来完成列表中的投射。

例如:然后可以将查询中使用聚合函数如以下

db.collection.aggregate([ 
    { "$match": { "_id": { "$in" : ids } } } 
]) 

上面

蒙戈壳

var array = ["585808969e39db5196444c07", "585808969e39db5196444c06"]; 
var ids = array.map(function(id){ return ObjectId(id); }); 

是基本上相同

db.collection.find({ "_id": { "$in": ids } }) 

Node.js的

var {ObjectId} = require('mongodb'); // or ObjectID 
var ids = array.map(id => ObjectId.isValid(id) ? new ObjectId(id) : null;); 
+0

thnks它的作品! – arunraj414