【发布时间】:2015-05-03 10:37:38
【问题描述】:
我有一个包含如下文档的集合:
{
"_id" : ObjectId("..."),
"some_key" : "some_value",
...,
"another_key" : {
"a key" : "a value",
...
}
}
这个集合中有几种不同类型的文档,最大的不同发生在“another_key”字段中。
我希望能够根据“another_key”中子文档的大小来查找文档。如果它是一个数组,我可以使用这个查询:
{
"another_key" : {
$size : 0
}
}
查找所有留空的文档。不幸的是,根据the documentation,这只适用于数组。
有没有办法对子文档执行此操作?
【问题讨论】:
-
嵌套对象并不是真正的子文档,因此不应被称为子文档,因为它们不像文档,也不能在它们上使用 $ 运算符。我建议将 another_key 变成一个对象数组(子文档),如下所示:{key: 'akey, value: 'avalue'}。您现在可以找到 $size,如果需要,还可以找到密钥。 db.collection.find({'another_key.key': 'aKey}) 等
-
您能详细解释一下这个用例吗?老实说,想做这样的事情很奇怪,我想知道总体目标是什么。也许有更好的方法?使用
$where通常是一个非常糟糕的主意。 -
@wdberkeley 我的特殊用例是我正在使用其他人提供的数据,并且我想编写一个脚本来验证他们的代码更新时数据不会被弄乱.就我而言,我可以检查它是否为空,但我想知道更普遍的问题。
-
@BrianNoah 你应该把它写成完整的答案。它不适用于我的情况,因为我不是创建数据的人,但它可以帮助其他人。
标签: mongodb mongodb-query