如何在where条件下执行聚合查询

时间:2017-01-03 09:28:47

标签: mongodb mongodb-query aggregation-framework

我有这个MongoDB查询:

var array=[]; //some string values

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

但这并没有返回任何结果。我该怎么做?

1 个答案:

答案 0 :(得分:0)

如评论中所述,您的array变量是十六进制字符串值ex :["57f36e94517f72bc09ee761e"]的数组,对于mongo shell,您需要先将这些字符串值强制转换为ObjectId s。使用JavaScript map() 在列表中完成转换的方法。

例如:

mongo shell

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

然后您可以使用聚合函数进行查询,如下面的

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

以上与

基本相同
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;);