{
"_id" : ObjectId("550add7ee0b4b54a3e7ad53c"),
"day" : "14-03-2015",
"node" : "2G",
"nodeName" : "BLR_SGSN",
"" : {
"A" : 905.84,
"B" : 261.34,
"C" : 2103.94,
"D" : 39.67
}
}
我将此作为我在mongo中的数据。 如何获得A,B,C,D的值。 ??
答案 0 :(得分:1)
您无法对此进行查询,因为无法选择子文档字段。
这只能是编程错误导致这样的事情(并且可能尝试在过程中计算密钥名称)的结果:
db.collection.insert({
"": {
"A": 1,
"B": 2,
"C": 3
}
})
因此,您无法通过标准查询方式获取子元素,如:
db.collection.find({ ".A": 905.84 })
您可以通过为这些方式更新受影响的集合中的文档,为其提供正确的密钥名称来解决此问题。但这当然是一个迭代过程。由于命名问题,不确定如何解决这个问题,而不是使用来自shell的JavaScript,但是:
db.collection.find({ "": { "$exists": true } }).forEach(function(doc) {
if ( doc.hasOwnProperty("") ) {
doc.newprop = doc[""];
delete doc[""];
db.collection.update({ "_id": doc._id }, doc );
}
})
然后至少你可以通过新的" newprop"键(或任何你称之为):
db.collection.find({ "newprop.A": 905.84 })
同样的事情也适用于其他司机。
我的建议是"去解决这个问题"并找出导致此密钥名称首先为blank
的代码。
应该有一个提交给MongoDB核心项目的错误报告,因为没有一个dirvers能够很好地处理这个问题。我以为我甚至可以在这里使用$rename
,但你不能。
所以空白""
键是一个需要修复的问题。