如何在Mongoose.find中只select一个数组的元素
比方说,我已经在数据库中得到了这些值:
{ name: '1', values: [{ subname: 'awesome' }, { surname: 'cool' }] }
我怎么能过滤只有我感兴趣的价值数组?
我想得到我发现的结果:
{ name: '1', values: [{ subname: 'awesome' }] }
我想也许有select的可能性? 就像是
MyCollection.find({name: '1'}).select(BLACK_MAGIC);
BLACK_MAGIC
用我感兴趣的值过滤我的数组,在这个例子中values.subname ='awesome'
提前Thx任何想法
附注:我很有兴趣用Mongoose查询和函数解决这个问题,而不是解决scheme,在结果数组上使用javascript
我想你可以用这个聚合 。
您将$放松,以便每个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
是一个对象,而不是一个对象的数组。 你可以用$ first来获得想要的结果。