gpt4 book ai didi

mongodb - 在 Mongo 集合中搜索对象数组

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

我有一个包含对象数组的集合。我知道如何使用 $elemMatch 将一个对象作为参数进行搜索,但我需要一种方法来使用数组中多个对象的值。

样本收集:

{ '_id' : ObjectId('5788804292a1c428cd5377ff'), 'index' : 'a', 'data' : [ { 'value0' : 'data_a' }, { 'value1' : 'data_b' }, { 'value2' : 'data_c' } ] }
{ '_id' : ObjectId('5788804b92a1c428cd537800'), 'index' : 'b', 'data' : [ { 'value0' : 'data_a' }, { 'value1' : 'data_x' }, { 'value2' : 'data_c' } ] }
{ '_id' : ObjectId('5788805592a1c428cd537801'), 'index' : 'c', 'data' : [ { 'value0' : 'data_a' }, { 'value1' : 'data_x' }, { 'value2' : 'data_y' } ] }

如何指定搜索条件以匹配符合以下任一条件的所有记录:

  1. value1 == data_bvalue2 == data_c
  2. value1 == data_xvalue2 == data_y

我已尝试使用 find 执行以下操作,但未返回任何结果:

{'data': {$elemMatch: {$in: [{'value1': 'data_b', 'value2': 'data_c'}, {'value1':'data_x', 'value2': 'data_y'}]}}}

最佳答案

如果你打算匹配:

({value1: data_b} AND {value2: data_c}) OR ({value1: data_x} AND {value2: data_y})

然后你可以使用这个查询,它是上述逻辑的直接翻译:

db.collection.find(
{$or: [
{'data.value1': 'data_b', 'data.value2': 'data_c'},
{'data.value1': 'data_x', 'data.value2': 'data_y'}
]}
)

应该从您的示例中返回两个文档:

{
"_id": ObjectId("5788804292a1c428cd5377ff"),
"index": "a",
"data": [
{
"value0": "data_a"
},
{
"value1": "data_b"
},
{
"value2": "data_c"
}
]
}
{
"_id": ObjectId("5788805592a1c428cd537801"),
"index": "c",
"data": [
{
"value0": "data_a"
},
{
"value1": "data_x"
},
{
"value2": "data_y"
}
]
}

请注意,使用顶级$or 运算符的查询,$or 运算符的所有术语都必须有一个索引。否则 MongoDB 将执行集合扫描,这将是一个性能问题,并可能将您的工作集移出内存。

请参阅https://docs.mongodb.com/manual/reference/operator/query/or/#op._S_or了解更多详情。

关于mongodb - 在 Mongo 集合中搜索对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38389511/

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