gpt4 book ai didi

mongodb - 如何为多个字段创建 "in"运算符查询?

转载 作者:可可西里 更新时间:2023-11-01 10:45:05 24 4
gpt4 key购买 nike

我有一个收藏

db.list.insert({ first: "apple", second: "banana" });
db.list.insert({ first: "apple", second: "tree" });
db.list.insert({ first: "orange", second: "tree" });
db.list.insert({ first: "medal", second: "sport" });

我想根据这两个字段查询文档,只有当两个字段都匹配时才获取文档。

我试过下面的查询

db.list.find(
$or: [
{ first: 'apple', second: { $in: ['tree', 'banana']}},
{ first: 'orange', second: { $in: ['tree']}}
],
).limit(5);

并为

添加索引
{first: 1, second: 1}

在查询计划中,它生成的计划数量与“or”查询中的谓词数量相同。大约有 200 万个文档,如果它没有在第一个谓词中获得第 5 个文档,那么它会获取与所有谓词匹配的所有文档,并且查询超时。还有其他有效的方法吗?

最佳答案

您可以使用 $facet 和 mongodb 聚合管道。这将确保只获取一次文档。这是示例查询

    db.list.aggregate([
{
$facet: {
"condition_1": [
{
"$match": { first: 'apple', second: { $in: ['tree', 'banana']}}
},
{
"limit": 5
}
],
"condition_2": [
{
"$match": { first: 'orange', second: { $in: ['tree']}}
},
{
"limit": 5
}
]
}
}
], {allowDiskUse: true})

关于mongodb - 如何为多个字段创建 "in"运算符查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56578078/

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