我使用的是mongoose,我的模型叫做Db.Property。
当我做Db.Property.find()并且我传递下方的对象时,我得到了预期的结果。
{
address: { "$in": [ /f/i ] },
environments: 1,
price: { "$gt": 3000, "$lt": 20000 },
timestamp: {
"$gt": 2017-01-23T22:38:24.904Z,
"$lt": 2017-03-24T22:38:24.906Z
},
_id: { "$nin": [ "58be3e36309524218ca5eb2e" ] }
}
请注意我添加" $ nin"不包括id的条目:)
如果那时,我这样做:
model.aggregate([ {
$match : mongooseQuery // this is the query you see above
}, {
$group : {
_id : {
environments : '$environments'
},
avg : {
'$avg' : '$price'
}
}
}]).exec(...)
我得到的平均价格就像我明确排除的文件在结果中一样。
我做错了什么?
答案 0 :(得分:1)
我一直在研究这个问题并发现它无法正常工作,因为我正在将字符串传递给$ nin:
_id: { "$nin": [ "58be3e36309524218ca5eb2e" ] }
我改为:
var ObjectID = require('mongodb').ObjectID;
var modelObjId = new ObjectID("58be3e36309524218ca5eb2e");
_id: { "$nin": [ modelObjId ] }
这很好,平均值是正确的
希望它可以帮助遇到此麻烦的其他人
不对字符串进行硬编码,这里的代码只是一个例子:)