gpt4 book ai didi

mongodb - 按子文档大小查找 MongoDB 文档

转载 作者:可可西里 更新时间:2023-11-01 09:44:01 25 4
gpt4 key购买 nike

我有一个包含如下文档的集合:

{
"_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' 以获得更好的搜索性能。

我建议将 another_key 变成一个对象(子文档)数组,如下所示:

db.items.insert({
some_key : 'some_value',
another_key : [
{key: 'akey', value: 'avalue'},
{key: 'bkey', value: 'bvalue'}
]
});

您现在可以按 $size 查找,如果需要,还可以按 key 查找。

mongos> db.items.find({another_key: {$size: 0}})
// 0 documents
mongos> db.items.find({another_key: {$size: 1}})
// 0 documents
mongos> db.items.find({another_key: {$size: 2}})
{ "_id" : ObjectId("54f62a48e2fdcc95d4934424"), "some_key" : "some_value", "another_key" : [ { "key" : "akey", "value" : "avalue" }, { "key" : "bkey", "value" : "bvalue" } ] }
mongos> db.items.find({another_key: {$size: 3}})
// 0 documents

mongos> db.collection.find({'another_key.key': 'akey'})
{ "_id" : ObjectId("54f62a48e2fdcc95d4934424"), "some_key" : "some_value", "another_key" : [ { "key" : "akey", "value" : "avalue" }, { "key" : "bkey", "value" : "bvalue" } ] }

不幸的是,您不能进行比较 $size 查询:

mongos> db.items.find({another_key: {$size: {$gt:1} } } )
error: {
"$err" : "Can't canonicalize query: BadValue $size needs a number",
"code" : 17287
}

关于mongodb - 按子文档大小查找 MongoDB 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28820598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com