0
{
        "_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 的值。??

4

1 回答 1

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 核心项目,因为没有一个驱动程序能很好地处理这个问题。我以为我什至可以$rename在这里使用,但你不能。

所以空白""键是一个需要修复的问题。

于 2015-06-19T13:27:42.867 回答