2011-10-21 18 views
1

クエリによって返されるフィールドを条件付きで指定することは可能ですか?ここに私のユースケースで次のように私は、ネストされた利用者の会話を持つオブジェクトを持っている:mongodb 'find()'クエリで条件付き "フィールド選択"を定義する方法は?

{ 
    "_id" : "someId", 
    user_id: 'user1', 
    conversations: 
    [ 
    { 
     user_id: 'user2', 
     comments: 
     [  
     { 
      user_id: 'user2', 
      text: 'Hi user1' 
     }, 
     { 
      user_id: 'user1', 
      text: 'Hi user2' 
     }, 
     ] 
    }, 
    { 
     user_id: 'user3', 
     comments: 
     [  
     { 
      user_id: 'user3', 
      text: 'Hi user1' 
     } 
     ] 
    }, 
    ] 
} 

私は、すべてのユーザーが検索して、彼らが所有していないすべてのオブジェクトではなく、会話を表示できるようにしたいと思います。何かを次のように

db.users.find({$or:[{user_id: X}, {'conversations.user_id':x}]}) 

しかし、この意志:あなたの助けを事前に

findObj = function(criteria, user, callback) { 
    Object.find({criteria}, {conversation: 
     { 
      if (user_id == user.id || conversations[].user_id = user.id) {1} else {0} 
     } } 
    ); 
} 

おかげで、 -Eric

答えて

0

をあなたはとてもように、ユーザXを伴う会話を持っているすべてのユーザーを取得することができますあなたが望むことをしないでください。スキーマに問題があります。ユーザーオブジェクトから会話を削除し、専用のコレクションに保存して、特定の会話を別々に照会できるようにする必要があります。

+0

お礼ありがとうございました。私のオブジェクトから会話を動かしても動かすことができます。あなたの返信をありがとう、-Eric – ebdr