gpt4 book ai didi

arrays - 数组中的精确匹配 (MongoDB)

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

我在 MongoDB 中有一个集合,如下所示:

{
"_id" : 1,
"parent" : 1,
"input" : [
{
"name" : "IAA1",
"value" : "IAA1 Value3",
"displayOrder" : 1
},
{
"name" : "IAA2",
"type" : "IAA2 Value4",
"displayOrder" : 2
}]
}

{
"_id" : 2,
"parent" : 1,
"input" : [
{
"name" : "IAA1",
"value" : "IAA1 Value3",
"displayOrder" : 1
},
{
"name" : "IAA2",
"type" : "IAA2 Value4",
"displayOrder" : 2
},
{
"name" : "IAA3",
"type" : "IAA2 Value4",
"displayOrder" : 2
} ]
}

我需要做的是,只找到那些所有数组元素都与 name 的值相匹配的文档。例如:

  1. {"input.name":{$all:["IAA1","IAA2","IAA3"]}}

这工作正常并返回两个文档,但是:

  1. {"input.name":{$all:["IAA1","IAA2"]}}

同时返回两个文档。我的要求是第二个查询应该只返回第一个文档而不是第二个,因为它有一个带有 name:"IAA3" 的额外元素。

The order of the elements in the array is not fixed I need to generate the query dynamically based on parent Id and what columns should be present.

最佳答案

您需要使用 $size 的组合和 $all运算符以获得所需的结果。 大小必须是您在 $all 中使用的参数数量。在这里,您必须检查输入数组的大小与 $all 中的参数数量,以便它仅在大小与参数数量匹配的那些 input 数组中搜索给定参数 ($all)。

例如在示例 Json 中,您在 $all 中使用了 2 个参数,因此您必须将 input 的 $size 设为 2。在这种情况下,查询将仅搜索大小为 2 的那些 input

查询将像 -

db.collection.find({
"input.name": {
$all: ["IAA1", "IAA2"]
},
"input": {
$size: 2 // This is the number of param you pass in $all
}
}).pretty()

关于arrays - 数组中的精确匹配 (MongoDB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29960001/

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