2

私はやや次のスキーマを持っています(_idなし)-

 {uid: String,
 inbox:[{msgid:String, someval:String}]
 }

さて、リクエストで msgid を取得し、次のように次のマングースクエリで使用します-

 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 に答える