MongoDB Query用于计算特定数组索引所在的文档。索引是javascript变量

时间:2017-04-13 21:36:33

标签: javascript mongodb mongodb-query

我有一些看起来像这样的数据:

{
"_id" : ObjectId("58efcbb9ac808c5c0771b1b0"),
"guid" : "cda474b9-1362-4ffe-99df-5c0783fff8be",
"g" : "SomeString",
"m" : "Something else",
"r" : null,
"dh" : ISODate("2017-04-13T19:00:00.000Z"),
"ei" : 60000,
"v" : [ 
    {}, 
    {}, 
    {}, 
    {}, 
    {
        "last" : 0.0,
        "sum" : 0.0,
        "cnt" : 1,
        "minimum" : 0.0,
        "maximum" : 0.0
    }, 
    {}, 
    {}
]

}

有很多这样的文件。对于单个guid,可能有100个文档,如上面的那个。我想做的是计算guid = SOMEGUID和元素" cnt"的文件数量。存在于特定的数组元素中。

问题是,数组元素索引存储在变量中。它来自其他地方。

这一行:

print(myguid + ": " + db.MyCollection.find({"guid" : myguid, "v.4.cnt" : { $exists : true}} ).count());

以上作品很棒。它输出如下内容:

2e605c07-54b2-49e6-8a9f-f31d3dffe57c: 28

我的问题是我不想使用" 4",我将索引存储在名为arrayIndex的变量中,我想将其嵌入到查询中。

像这样的查询无效:

print(myguid + ": " + db.MyCollection.find({"guid" : myguid, "v.arrayIndex.cnt" : { $exists : true}} ).count());

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您可以在js代码中嵌入索引 你需要这样的东西。

function count(myguid, index) {
    const query = {"guid": myguid};
    query["v." + index + ".cnt"] = {$exists: true};

    return db.MuCollection.count(query);
}

此方法将为特定索引和计数对象生成查询

用法

count("some-guid", 3);