埋め込まれた配列からオブジェクトを削除しようとしています($pull
)。この例では
{
one : "All",
one : [
{
name: "People",
two: [
{
three_id: 123,
three: "Jonny",
},
{
three_id: 456,
three: "Bobby",
}
]
},
{
name: "Animals",
two: [
{
three_id: 828,
three: "Cat",
},
{
three_id: 282,
three: "Dog",
}
]
}
]
}
、私はボビー」を取り除くしようとしている:(ジャバスクリプト/ Node.jsのドライバを使用して)ここ
は、1つ、2つは、三つのレベルがサンプルデータであり、 "
私が欲しい場合、私は正常にこのように、「3つのレベル」で文書を一致させることができます:
db.test.find({"one.two.three_id" : 456});
をしかし、私はupdate
を使用してそのレコードを除去する方法は考えてきません。ここではいくつかの試み、作品のどれも、次のとおりです。
// failed attempts
db.test.update({"one.two.three_id" : 456}, {$pull:{'one.$.two.$.three_id': 456}});
db.test.update({"one.two.three_id" : 456}, {$pull:{'three_id': 456}});
// deletes entire level two "People"
db.test.update({"one.two.three_id" : 456}, {$pull: {one: {two : {$elemMatch: {'three_id': 456}}}}});
私はあなたが2の位置$ operators
を使用できないことを読んで、あなたは二番目のインデックス位置を知っている必要があること。ただし、削除したい埋め込み辞書のインデックスを使用する必要はありません。
参照: MongoDBのプル
http://docs.mongodb.org/manual/reference/operator/update/pull/
お返事ありがとうございます。私はちょうど試しましたが、100回目の '$ err:サポートされていない投影オプション:1、$ 2、コード:13097 'になります。mongo shellを使ってテストしています。 –
上記のコメントを無視してください。あなたのソリューションは機能します。私は再びそれを試して、私は欠けている期間があった。すばらしいです。 –
学習上の注意:単純なクエリを使用して式を短縮しようとしましたが、「配列を含む対応するクエリフィールドがない位置演算子を適用できません」というメッセージが表示されました。したがって、クエリは$ operatorの使用を設定します。 –