MongoDb获取子集而不是整个记录
我的MongoDB文档结构如下:MongoDb获取子集而不是整个记录,mongodb,Mongodb,我的MongoDB文档结构如下: [ { "locale":"en", "translations":[ { "name":"translation1", "value":"enValue" }, { "name":"translation2", "value":"enValue" },
[
{
"locale":"en",
"translations":[
{
"name":"translation1",
"value":"enValue"
},
{
"name":"translation2",
"value":"enValue"
},
{
"name":"translation3",
"value":"enValue"
}
]
},
{
"locale":"ru",
"translations":[
{
"name":"translation1",
"value":"ruValue"
},
{
"name":"translation2",
"value":"ruValue"
},
{
"name":"translation3",
"value":"ruValue"
}
]
}
]
我需要为locale
en
获取名为translation1
的翻译。我尝试这样做:db.translations.find({“locale”:“en”,“translation.name”:“translation1”})
但它返回整个locale行,包含所有翻译,而不仅仅是translation1
。我是MongoDB的新手,我做错了什么?您可以使用$elemMatch
进行此操作
db.translations.find({"locale" : "en"},
{ translations: { $elemMatch: { name: "translation1" } } } )
结果:
{
"_id" : ObjectId("5e845ba1005e625a6237d2e0"),
"translations" : [
{
"name" : "translation1",
"value" : "enValue"
}
]
}
哦,可能我需要使用聚合???你也可以使用。不确定哪一个更好。嗯,我只是尝试了
db.translations.find({“locale”:“en”},{translations:{$elemMatch:{name:“translation1”}}}}
,结果仍然是整个文档行:{u id:“5e845b2a2953d9001010fbc0”,“locale:“en”,“translations:[{“name:“translation1”,“value:“enValue”},{“name:”“translation2”,“value”:“enValue”},{“name”:“translation3”,“value”:“enValue”}]}
什么是MongoDB版本?因为在我的服务器上它可以工作。但取决于文档,它应该可以工作……嗯,我想问题在于我使用的游乐场。我只是在我的mongo CLI中运行查询,所有的功能都在那里工作。谢谢!