假设我在数据库中有这些值:
{
name: '1',
values: [{
subname: 'awesome'
}, {
surname: 'cool'
}]
}
我怎么能只用我感兴趣的值过滤数组?
我希望得到我的发现:
{
name: '1',
values: [{
subname: 'awesome'
}]
}
我想也许有选择的可能性?像
这样的东西MyCollection.find({name: '1'}).select(BLACK_MAGIC);
BLACK_MAGIC
使用我感兴趣的值过滤我的数组,在此示例中,values.subname ='awesome'
预先提出任何想法
旁注:我很有兴趣使用Mongoose查询和函数解决这个问题,而不是在结果数组上使用post javascript解决方案
答案 0 :(得分:1)
我认为您可以使用aggregation。
您希望$unwind以便每个values
对象都在一个单独的文档中。
然后使用$match过滤结果。
MyCollection.aggregate([
{
$unwind: '$values'
},
{
$match: {
'values.subname': 'awesome'
}
},
// EDIT
{
$group: {
_id: '$_id',
name: {
$first: "$name"
},
values: {
$push: { subname: "$values.subname" }
}
}
}
], function (err, results) {
});
如果它有效,你就会更近一点。唯一的事情是values
是一个对象,而不是一个对象的数组。您可以将$group与$first一起使用以获得所需的结果。