我有点以下架构(没有_id) -
{uid: String,
inbox:[{msgid:String, someval:String}]
}
现在,在请求中我得到了msgid,我在下面的mongoose查询中使用它,如下所示 -
my_model.findOne({'inbox.msgid':'msgidvaluexyz'}
, function(err, doc) {
console.log(doc);
return !0; })
现在,问题是我收到了包含特定邮件的整个文档以及收件箱中的其他邮件 -
Output-
{uid:'xyz',
inbox:[
{msgid:,someval},
{msgid:'our queried msgid',someval}, //required sub array
{msgid:,someval},
]
}
现在我可以使用什么查询来获取特定的子数组,因为文档收件箱太大而无法循环。
答案 0 :(得分:2)
使用$
positional selection operator让返回的文档仅包含匹配的inbox
元素:
my_model.findOne({'inbox.msgid':'msgidvaluexyz'}
, {'inbox.$': 1}
, function(err, doc) {
console.log(doc);
return !0; })
答案 1 :(得分:0)
如果我理解你的问题:
// find each person with a last name matching 'Ghost'
var query = Person.findOne({ 'name.last': 'Ghost' });
// selecting the `name` and `occupation` fields
query.select('name occupation');
http://mongoosejs.com/docs/queries.html
您可以选择要返回的字段。您只能获得inbox
数组或除此之外的所有内容。