我有这个MongoDB查询:
var array=[]; //some string values
collection.aggregate(
{ $match: { '_id': { $in : array } } }
)
但这并没有返回任何结果。我该怎么做?
答案 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;);