如何在mongodb中查询未知子域数的精确马赫数
我有一个集合,其中文档可以包含未知数量的子文档:如何在mongodb中查询未知子域数的精确马赫数,mongodb,Mongodb,我有一个集合,其中文档可以包含未知数量的子文档: "agent_id": { "0":"1234", "1":"2234",...etc 如何在所有agent\u id子字段中搜索完全匹配的对象?您需要动态创建一个对象,该对象的属性是嵌入文档名agent\u id与点(.)和字段名的串联,用引号括起来,类似这样: var query = { "agent_id.0": "78343", "agent_id.1": "78343",
"agent_id": {
"0":"1234",
"1":"2234",...etc
如何在所有
agent\u id
子字段中搜索完全匹配的对象?您需要动态创建一个对象,该对象的属性是嵌入文档名agent\u id
与点(.)和字段名的串联,用引号括起来,类似这样:
var query = {
"agent_id.0": "78343",
"agent_id.1": "78343",
"agent_id.2": "78343",
"agent_id.3": "78343",
...
"agent_id.n": "78343"
}
创建对象的一种方法是使用生成子文档键。下面演示了这种方法。在Map Reduce操作中,agent\u id
子文档中的键数组被生成到输出集合“collection\u keys”,然后用于生成查询表达式:
假设您填充了一个样本集合
db.collection.insert([
{
"agent_id": {
"0":"1234",
"1":"2234",
"56":"8451",
"74":"1475",
"10":"1234"
}
},
{
"agent_id": {
"5":"5874",
"18":"2351"
}
}
])
运行以下mapReduce操作
var mr = db.runCommand({
"mapreduce" : "collection",
"map" : function() {
for (var key in this.agent_id) { emit(key, null); }
},
"reduce" : function(key, stuff) {
return null
},
"out": "collection" + "_keys"
});
var query = { "$or": [] },
value = "1234";
db[mr.result].distinct("_id").forEach(function (key){
var obj = {};
obj["agent_id." + key] = value;
query["$or"].push(obj)
});
printjson(query);
将产生:
{
"$or" : [
{
"agent_id.0" : "1234"
},
{
"agent_id.1" : "1234"
},
{
"agent_id.10" : "1234"
},
{
"agent_id.18" : "1234"
},
{
"agent_id.5" : "1234"
},
{
"agent_id.56" : "1234"
},
{
"agent_id.74" : "1234"
}
]
})
然后,您可以在查询中使用查询文档:
db.collection.find(query)
这将产生以下结果:
/* 0 */
{
"_id" : ObjectId("561d5312cd05efc95a1ea1f4"),
"agent_id" : {
"0" : "1234",
"1" : "2234",
"56" : "8451",
"74" : "1475",
"10" : "1234"
}
}
子文档数量未知是什么意思?