我有一些看起来像这样的数据:
{
"_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());
感谢任何帮助。
答案 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);