数据的格式是这样的:
{
"_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那个
修改,我确实不会,
还请大家帮忙提下解决方法,非常谢谢咯!
L'instruction de requête peut être simplifiée comme suit :
Les résultats de la requête renvoient des documents qui remplissent les conditions de correspondance. Bien que les champs renvoyés puissent être mappés, ils ne peuvent en réalité pas renvoyer uniquement les documents que vous avez mentionnés
id为2和3
. Mais maintenant que vous avez obtenu le document json qui remplit les conditions, vous pouvez écrire un programme pour obtenir le sous-document intégré souhaité.La déclaration de mise à jour est la suivante :
Mais il ne met à jour que le premier sous-document correspondant dans le tableau, mais
albums.id
il semble être unique et devrait répondre à vos besoins.Il existe une solution au n°1. $elemMatch peut également être utilisé comme deuxième paramètre de la méthode find pour limiter les éléments du tableau renvoyé. Comme suit :
L'ID de votre sous-document augmente-t-il automatiquement ?