如何在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"
    }
}
子文档数量未知是什么意思?