gpt4 book ai didi

mongodb - 匹配包含 MongoDB 中提供的数组的任意组合的数组字段

转载 作者:IT老高 更新时间:2023-10-28 13:36:20 26 4
gpt4 key购买 nike

我想用指定的数组元素列表进行查询,这样返回的文档只能包含我传递的元素,而不必包含所有元素。

给定的文件如下:

{
name: "Article 1",
tags: ["Funny", "Rad"]
}

{
name: "Article 2",
tags: ["Cool", "Rad"]
}

{
name: "Article 3",
tags: ["Rad"]
}

以下是一些示例数组及其各自的结果。

  • ["Rad"] 应该返回第 3 条
  • ["Rad", "Cool"] 应该返回第 2 条和第 3 条
  • ["Funny", "Cool"] 应该什么都不返回,因为没有文章只有这些标签之一或两者都有

我确信我可以使用 $where 解决这个问题,但出于显而易见的原因,我想避免这种情况。

最佳答案

您可以通过组合多个运算符来做到这一点:

db.test.find({tags: {$not: {$elemMatch: {$nin: ['Rad', 'Cool']}}}})

带有 $nin$elemMatch 正在查找单个 tags 元素既不是“Rad”也不是“Cool”的文档,然后父 $not 反转匹配以返回不匹配任何元素的所有文档。

但是,这也会返回 tags 缺失或没有元素的文档。要排除那些你需要添加一个限定符,以确保 tags 至少有一个元素:

db.test.find({
tags: {$not: {$elemMatch: {$nin: ['Rad', 'Cool']}}},
'tags.0': {$exists: true}
})

关于mongodb - 匹配包含 MongoDB 中提供的数组的任意组合的数组字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25318050/

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