我有这个mongo结构:
my_object {
"_id" : ObjectId("5630c996b707fd090c060f21"),
"local" : "FR-fr",
"ARTD" : [
{
"id" : 0,
"mot" : "le",
"v_path" : ""
},
{
"id" : 1,
"mot" : "la",
"v_path" : ""
}
],
"ARTG" : [
{
"id" : 2,
"mot" : "ce",
"v_path" : ""
}
],
"SUSU" : [ ],
"RECS" : [ ],
"SUBS" : [ ],
"VT" : [ ],
"PREP" : [ ]
}
我想通过id检索一个对象, 例如:如果给出id 0,我想:
{
"id" : 0,
"mot" : "le",
"v_path" : ""
}
如果给出id 2,我想:
{
"id" : 2,
"mot" : "ce",
"v_path" : ""
}
所以,我想找到对象的任何地方(在ARTD或ARTG ......等)
我可以在mongo shell中使用什么命令?
此致
答案 0 :(得分:0)
您可以尝试使用 $or
运算符进行查询,并使用 $elemMatch
投影特定的数组元素。使用 find()
从 forEach()
方法中迭代光标以访问生成的文档,检查字段并访问匹配字段的数组元件。以下内容针对id
1:
var id = 1,
query = {
"$or": [
{ "ARTD.id": id },
{ "ARTG.id": id }
]
},
projection = {
"ARTD": {
"$elemMatch": { "id": id }
},
"ARTG": {
"$elemMatch": { "id": id }
}
};
db.collection.find(query, projection).forEach(function (doc){
var result = {}, key;
["ARTD", "ARTG"].forEach(function(key) {
if (doc.hasOwnProperty(key)) {
result = doc[key][0];
}
});
printjson(result);
})
示例输出:
{ "id" : 1, "mot" : "la", "v_path" : "" }