[英]mongodb find element within a hash within a hash
我正在尝试构建一个从Mongo客户端运行的查询,该查询将允许访问哈希中哈希中以下元素的哈希。
这是数据的结构:
"_id" : ObjectId("BSONID"),
"e1" : "value",
"e2" : "value",
"e3" : "value"),
"updated_at" : ISODate("2015-08-31T21:04:37.669Z"),
"created_at" : ISODate("2015-01-05T07:20:17.833Z"),
"e4" : 62,
"e5" : {
"sube1" : {
"26444745" : {
"subsube1" : "value",
"subsube2" : "value",
"subsube3" : "value I am looking for",
"subsube4" : "value",
"subsube5" : "value"
},
"40937803" : {
"subsube1" : "value",
"subsube2" : "value",
"subsube3" : "value I am looking for",
"subsube4" : "value",
"subsube5" : "value"
},
"YCPGF5SRTJV2TVVF" : {
"subsube1" : "value",
"subsube2" : "value",
"subsube3" : "value I am looking for",
"subsube4" : "value",
"subsube5" : "value"
}
}
}
因此,我基于db.my_collection.find({“ e5.sube1.subsube4”:“我要寻找的值”})建议根据“建议”将通配符“散列”为散列的点符号进行了尝试,该提示不断出现空结果集。 我也尝试使用匹配而不是使用/ value的确切值来查找,但我仍然是lo /,并且结果集仍然为空。 我知道至少有1个文档具有“我正在寻找的价值”。
任何想法-请注意,我仅限于使用Mongo Shell客户端。
谢谢。
您有两个问题:
subsube4
而不是subsube3
根据要检查的sube1
子文档,您应该执行
db.my_collection.find({"e5.sube1.26444745.subsube4": "value I am looking for"})
要么
db.my_collection.find({"e5.sube1.40937803.subsube4": "value I am looking for"})
要么
db.my_collection.find({"e5.sube1.YCPGF5SRTJV2TVVF.subsube4": "value I am looking for"})
如果要查看三个中的任何一个,可以使用$ or运算符 。
如果您不知道文档的键,那么这就是架构设计的问题:您应该使用数组而不是对象。 相似案例: 如何查询动态键-mongodb模式设计
编辑
由于您解释了一次特殊的要求才能知道"value I am looking for"
的计数,因此我们可以运行map reduce 。 您可以在外壳中运行这些命令。
定义地图功能
var iurMapFunction = function() {
for (var key in this.e5.sube1) {
if (this.e5.sube1[key].subsube3 == "value I am looking for") {
var value = {
count: 1,
subkey: key
}
emit(key, value);
}
}
};
定义归约函数
var iurReduceFunction = function(keys, countObjVals) {
reducedVal = {
count: 0
};
for (var idx = 0; idx < countObjVals.length; idx++) {
reducedVal.count += countObjVals[idx].count;
}
return reducedVal;
};
运行mapreduce命令
db.my_collection.mapReduce(iurMapFunction,
iurReduceFunction, {
out: {
replace: "map_reduce_result"
},
}
);
查找计数
db.map_reduce_result.find()
对于您对象中的每个动态键,这应该为您提供其具有值为0的value I am looking for
的嵌入式字段subsube3
的次数。
因此,由于无法将其转换为javascript / mongo shell数组,因此我将转到计划B,该计划编写一些代码(无论是Perl还是Ruby),然后将结果集放入哈希数组中,并遍历每个文档/子文档。
感谢Mario的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.