如何在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来获得想要的结果。