2017-09-20 12 views
0
私はnodejsとマングースを使用しています

を働いていない複数のクエリは、ここFindoneマングース

はモンゴ内の文書であるフレームワークを表現するために:私はアクセスしようとすると、今

{                   
     "_id" : ObjectId("59c1fe16b68d844d8473c6fe"),      
     "is_active" : "0",            
     "membership_expiry_date" : ISODate("2018-09-20T05:35:18.485Z"), 
     "date_of_joining" : ISODate("2017-09-20T05:35:18.485Z"),   
     "user_name" : "Max M",           
     "first_name" : "Max",           
     "password" : "MyPwd",            
     "address" : "NewTown",           
     "email_id" : "[email protected]",          
     "phone_number" : "12345678901",          
     "books_borrowed" : [            
       {               
         "due_date" : ISODate("2017-09-22T05:35:18.511Z"), 
         "book_id" : "1234",        
         "is_renewed" : true,        
         "_id" : ObjectId("59c1fe16b68d844d8473c700")  
       },              
       {               
         "due_date" : ISODate("2017-09-22T05:35:18.531Z"), 
         "book_id" : "1235",        
         "is_renewed" : false,        
         "_id" : ObjectId("59c1fe16b68d844d8473c6ff")  
       }               
     ],                
     "__v" : 0               
}  

books_borrowedどこUSER_NAME = Maxとbook_id = 1234 私はこれはエラー= nullを返し、応答もnullである

model.findOne({"user_name":"Max M","book_id":1234}, { 
     'books_borrowed': 1 
    }, 
    function(err, res) { 
     console.log("##Err:: " + JSON.stringify(err) + " response:: " + JSON.stringify(res)); 
     if (err) { 
      return callback('Error while updating...'); 
     } else { 
      return callback(null, res); 
     } 
    }); 

を使用しています。

私は 'books_borrowed.book_id' でbook_id交換した場合、私は、私はちょうど= 1234 book_idのデータを含むオブジェクトを望んも= 1235

book_idとのデータが含まれてい

{ 
    "_id": "59c1fe16b68d844d8473c6fe", 
    "books_borrowed": [ 
    { 
     "due_date": "2017-09-22T05:35:18.511Z", 
     "book_id": "1234", 
     "is_renewed": true, 
     "_id": "59c1fe16b68d844d8473c700" 
    }, 
    { 
     "due_date": "2017-09-22T05:35:18.531Z", 
     "book_id": "1235", 
     "is_renewed": false, 
     "_id": "59c1fe16b68d844d8473c6ff" 
    } 
    ] 
} 

を取得します。

私はここで何が欠けていますか?また、私はbooks_borrowedオブジェクトにこれらのオブジェクトIDを挿入したくありません。

答えて

0

使用このbooks_borrowed結果をフィルタリングする

model.findOne({ 
    "user_name":"Max M", 
    "books_borrowed": { 
     $elemMatch: {"book_id": "1234"} 
    } 
}, 
{ 
    "user_name": 1, 
    // ... as needed 
    "books_borrowed.$": 1 
}); 
+0

これは投射/位置情報の下にあります:https://docs.mongodb.com/manual/reference/operat//プロジェクション/ポジション/#proj._S_ –

+0

Ryanさん、これがうまくいきました。それについてもっと知りたいです。$ filter私はmongoとmongooseにも新しいです。 編集::私はリンクありがとうございましたあなたのコメントを逃しました:) – TGW

+0

ああ、問題は投影に私は "user_name"を追加しなかった:1 :) –

0

メイン文書にはないため、直接照会でbook_idを呼び出すことはできません。すべての借用した書籍を取得し、必要な文書を取得するために "books_borrowed"をフィルタリングする必要があります。

model.findOne({"user_name":"Max M","books_borrowed":{$elemMatch:{"book_id":"1234"}}, { 
    'books_borrowed': 1 
}, 
function(err, res) { 
    // Your code here 
}); 
+0

は、同意 '$ elemMatch'を使用しますが、慎重' book_id'は 'STRING'ない' Int' –

+0

まあだったこれができます私は間違っているだけでなく、応答もnullです – TGW

+0

私はコールバックにログを入れましたこれは私が取得したものです err :: null res :: null、 Ryanは私も文字列として試しましたが、まだ同じです 申し訳ありません私の悪い私は間違った名前を使用しましたが、それでも私はブーイングの中にすべての要素を与えていますks_borrowed配列。 – TGW

0

book_idは、配列内のままで直接アクセスすることはできません。これを試してみてください :

model.findOne({"user_name":"Max M", books_borrowed: {$elemMatch: {book_id:'1234'}}}) 
+0

私は私の質問に、既に述べたように、 私は「books_borrowed.book_id」でbook_id交換した場合、私は { 「_idを取得":" 59c1fe16b68d844d8473c6fe "、 " books_borrowed ":[ { " due_date ":" 2017-09-22T05:35:18 "511Z」、 "book_id": "1234"、 "is_renewed":真、 "_id": "59c1fe16b68d844d8473c700" }、{ "DUE_DATE": "2017-09-22T05:35:18.531Z"、 "book_id": "1235"、 "is_renewed":偽、 "_id":配列内のすべてのものを返す "59c1fe16b68d844d8473c6ff" } ] } – TGW

+0

@TGWあなたが二必要のない答えを更新しました議論btw。 –

+0

ありがとうございましたが、どちらも助けにならなかったので、ライアンの答えと一緒に行ってください:) – TGW