数据的格式是这样的:
{
"_id" : 1,
"people_id" : 1,
"albums" : [
{
"id" : 1,
"name" : "123",
"privilege" : 0,
},
{
"id" : 2,
"name" : "Q",
"privilege" : 5,
},
{
"id" : 3,
"name" : "Q",
"privilege" : 5,
},
]
}
{
"_id" : 2,
"people_id" : 2,
"albums" : [
{
"id" : 1,
"name" : "4",
"privilege" : 0,
},
{
"id" : 2,
"name" : "5",
"privilege" : 0,
}
]
}
现在我想的是
1 , 查询people_id 为 1 且 privilege 为 5的内嵌文档,mongodb的查询命令怎么写的啊
2,更新people_id 为 2 且权限为 id为2的内嵌文档的name字段值为 6,更新命令怎么写的啊
查询我用
db.find({"people_id" : 1,"albums":{"$elemMatch" : {"privilege" : 5}}})
来尝试匹配过,但是匹配出了:
{
"_id" : 1,
"people_id" : 1,
"albums" : [
{
"id" : 1,
"name" : "123",
"privilege" : 0,
},
{
"id" : 2,
"name" : "Q",
"privilege" : 5,
},
{
"id" : 3,
"name" : "Q",
"privilege" : 5,
},
]
}
我并不想要id为1的那个,只想唯一匹配id为2和3那个
修改,我确实不会,
还请大家帮忙提下解决方法,非常谢谢咯!
ringa_lee2017-04-24 09:14:57
クエリステートメントは次のように簡略化できます:
リーリークエリ結果は、一致条件を満たすドキュメントを返します。返されたフィールドはマッピングできますが、実際には、前述の id 2 および 3
を持つドキュメントのみを返すことはできません。ただし、条件を満たす json ドキュメントを取得したので、必要な埋め込みサブドキュメントを取得するプログラムを作成できます。 id为2和3
的文档。不过既然已经得到了满足条件的json文档,可以写程序来获取想要的内嵌子文档吧。
更新语句如下:
db.demo.find({"people_id" : 1, "albums.privilege": 5})
不过只是更新数组中第一个匹配的子文档,不过albums.id
albums.id
は一意であるようで、ニーズを満たしているはずです。 🎜迷茫2017-04-24 09:14:57
#1には解決策があります。 $elemMatch を find メソッドの 2 番目のパラメーターで使用して、返される配列内の要素を制限することもできます。以下の通り:
リーリー