2

我有一些以下架构(没有_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},
      ]
       }

现在我可以使用什么查询来获取特定的子数组,因为文档收件箱太大而无法循环。

4

2 回答 2

3

使用$位置选择运算符让返回的文档仅包含匹配的inbox元素:

my_model.findOne({'inbox.msgid':'msgidvaluexyz'}
  , {'inbox.$': 1}
  , function(err, doc) {           
    console.log(doc);
    return !0; })
于 2013-04-05T12:01:18.567 回答
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数组或除此之外的所有内容。

于 2013-04-05T08:41:03.803 回答