2016-04-28 17 views
1

mongodbデータベースでは、フィールドの照会に問題があります。私のコレクションのユーザーは、次のようになります。mongodb内のドキュメント内の埋め込み配列フィールドを照会

{ 

"_id" : "sam", 
"_password" : "t", 
"data" : [ 
    { 
     "_id" : "hp", 
     "nodeList" : [{'nodeId' : 1},{'nodeId' : 2},{'nodeId' : 3}], 
     "edgeList" : [{'edgeId' : 1},{'edgeId' : 2},{'edgeId' : 3}], 
     "options" : { 
      "edgeColor" : "blue", 
      "nodeColor" : "black" 
     } 
    }, 
    { 
     "_id" : "tt", 
     "nodeList" : [{'nodeId' : 1},{'nodeId' : 2},{'nodeId' : 3}], 
     "edgeList" : [{'edgeId' : 1},{'edgeId' : 2},{'edgeId' : 3}], 
     "options" : { 
      "edgeColor" : "blue", 
      "nodeColor" : "black" 
     } 
    } 
]}, 

{ 

"_id" : "bob", 
"_password" : "w", 
"data" : [ 
    { 
     "_id" : "hello", 
     "nodeList" : [{'nodeId' : 1},{'nodeId' : 2},{'nodeId' : 3}], 
     "edgeList" : [{'edgeId' : 1},{'edgeId' : 2},{'edgeId' : 3}], 
     "options" : { 
      "edgeColor" : "blue", 
      "nodeColor" : "black" 
     } 
    }, 
    { 
     "_id" : "world", 
     "nodeList" : [{'nodeId' : 1},{'nodeId' : 2},{'nodeId' : 3}], 
     "edgeList" : [{'edgeId' : 1},{'edgeId' : 2},{'edgeId' : 3}], 
     "options" : { 
      "edgeColor" : "blue", 
      "nodeColor" : "black" 
     } 
    } 
] 
} 

が、私はこのことからnodeList/edgeLisトンを取得し、また、特定の_id与えられたオプションでのEdgeColorを変更する必要があります。たとえば:_ id : "bob"

私はいくつか試しましたが、出力を得ることができませんでした。

db.users.find({ '_id': 'sam' , "users.data._id" : "hp"}, {}) 
db.users.findOneAndUpdate({"_id":"sam", "users.data._id": "hp"},{$addToSet:{"users.data.nodeList":{"nodeId":1,"nodeName":"Bellanduru", "lat":43.12, "long":33.43,"stock":3}}}) 

どうか私に教えてください。この"users.data._id"この"data._id"

と交換例えば

は次のようにあなたのquerysを置き換えるクエリで指定

+0

これは実行可能だとは思わないi n単一のクエリ。内部ノード文書オブジェクトをデータ配列に入れ、その値を設定してからユーザー文書に設定し、更新されたユーザー文書で更新クエリを実行する必要があります。私が気づいたことの1つは、あなたの質問に間違っていたことです。あなたの鍵に"db.users ...."と入力すると、既にユーザーコレクションをアドレッシングしているので、これを行う必要はありません。 –

答えて

0

あなたが選択したデシベル

にこのdb.usersであなたのコレクション名を宣言すると、あなたはそれほど必要ではないusersコレクションを選択しますこの

db.users.find({ '_id': 'sam' , "data._id" : "hp"}, {}) 
db.users.findOneAndUpdate({"_id":"sam", "data._id": "hp"},{$addToSet:{"data.nodeList":{"nodeId":1,"nodeName":"Bellanduru", "lat":43.12, "long":33.43,"stock":3}}}) 
関連する問題