您无法对此进行查询,因为无法选择子文档字段。
这只能是执行类似这样的编程错误的结果(并且可能试图在进程中计算一个键名):
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在这里使用,但你不能。
所以空白""键是一个需要修复的问题。