2017-06-08 8 views
0

NoSQLデータベースで新しく、キーに基づいて配列内のすべてのアイテムを検索する方法を見つける必要があります。 このコレクションがある場合 データベース.collection( "COL")コレクション内のアイテムを動的キーに基づいて検索する

{ 
    "_id" : ObjectId("59389f763007e086bc310c73"), 
    "messageIds" : [ 
     1, 
     2, 
     3, 
     4, 
     5 
    ], 
    "participants" : { 
     "59389e953007e086bc310c36" : 0, 
     "59389ea63007e086bc310c41" : 0 
    }, 
    "type" : "f" 
} 

のNode.jsに参加 "59389e953007e086bc310c36" を持っているすべてのドキュメントを見つけるにはどのように? MongoDBので

私はすべての項目を見つけることができますが、

db.getCollection('conversations').find(
    { 
     "participants.59389e953007e086bc310c36" : 
      { 
       $exists: true 
      } 
    }) 

は、私はあなたが設定し[]を使用することができますNode.jsの中で、それは価値

user_oid = "participants."+user_oid; 
    let criteria = { 
     user_oid: { $exists: true } 
    } 

    console.log(criteria); 
    database.collection(CONVERSATION_COLLECTION).find(criteria, (err,doc) => { 
     console.log(doc); 
     console.log; 

    }) 
+0

もちろんできます。基本的には1から値を取得しています。)文字列になる場所を入力してください。 2) 'ObjectId'の別の操作の結果ですが、単に文字列との結合のコンテキストで呼び出されるべき' .toString() 'メソッドを持っています。ケース2では、明示的に 'user_oid.toString()'を呼び出すことさえできます。名前付きキーを持つのは素晴らしいパターンではありませんが、それをやめることは何もありません。 –

+0

問題は 'let criteria = {};を実行する必要があります。条件[参加者] + user_oid.toString()] = {$ exists:true}; ' –

+0

ありがとうございます! –

答えて

0

によってuser_oid評価しませんので、それを行うことはできませんフィールドを動的に

let criteria = {}; 
criteria['participants.'+user_oid] = { $exists: true }; 

console.log(criteria); 
database.collection(CONVERSATION_COLLECTION).find(criteria, (err,doc) => { 
    console.log(doc); 
    console.log; 
}); 
関連する問題