我有这样的文件:
{
_id: "123",
arrayName: [
{ text: 'first', field: false},
{ text: 'second', field: true},
{ text: 'third', field: false}
]
}
现在我希望我的查询返回过滤的arrayName的长度,使其只有field === false
的对象。
我使用db.collection.find({})
尝试了很多查询,但我总是收到整个文档,最后还是count()=>到1。
有什么建议吗? 谢谢
答案 0 :(得分:1)
您可以使用投影操作符来实现您想要的效果。
试试这个:
db.collection.find({
_id : givenId ,
"arrayName.field" : false
},{
"arrayName.$":1
},function(err,result){
if(!err){
len = result.arrayName.length;
//use len however you want.
}
});
"arrayName.$":1
将仅选择数组的匹配元素。然后,您可以使用field:false
希望这有帮助!
答案 1 :(得分:0)
另一位用户已经使用普通的Mongo查询为您的问题提供了正确的答案。但我认为它不会有太多因为你将Mongo与Meteor一起使用,所以在这里我通过transform
命令使用find
函数向你展示另一种解决问题的方法:
Collection.find({
// ...
}, {
transform(doc) {
doc.filterArrayLength = doc.arrayName.filter(obj => obj.field === false).length;
return doc;
}
}).fetch();
使用此命令,结果将如下:
[
// ...
{
_id: "123",
arrayName: [
{
text: 'first',
field: false
}, {
text: 'second',
field: true
}, {
text: 'third',
field: false
}
],
filterArrayLength: 2
}
]