当前位置: 首页 > 知识库问答 >
问题:

如何处理find({})中的数组交集?

锺霍英
2023-03-14

有一个数组,例如:

var arr = ["1","1.1","1.3","2","2.1","2.2","2.3"]

和一个收藏A,就像这样

[
  {_id:"1",children:["1.1","1.4"]},
  {_id:"2",children:["2.1","2.2"]},
  {_id:"3",children:["3.1","3.2"]}
]

通过

find({....})
[
  {_id:"1",children:["1.1"]},
  {_id:"2",children:["2.1","2.2"]},
]

结果子数组是arr和集合A子数组的交集

如何设置查询运算符

共有2个答案

方波娃
2023-03-14

您无法通过简单的查询(find)来实现所需的结果,但可以使用聚合框架来实现。方法如下:

var arr = ["1","1.1","1.3","2","2.1","2.2","2.3"]

db.A.aggregate([ { "$unwind" : "$children" }, 
                 { "$match"  : { "children" : { "$in" : arr } } },
                 { "$group"  : { "_id" : "$_id", "children" : { "$push" : "$children" } } }
               ]
);

样本数据的结果:

{ "_id" : "2", "children" : [  "2.1",  "2.2" ] }
{ "_id" : "1", "children" : [  "1.1" ] }
景元徽
2023-03-14

此外,这并不是您要寻找的确切答案,但您可以使用$in运算符非常接近:

db.i.find({
  children : { $in : arr}
})

请记住,这不会产生上述结果(它将输出数组中的所有值,而不是{u id:“1”,子项:[“1.1”]},)。

但是您可以按照我的建议,然后在您的应用程序中迭代所有结果,并仅输出与您的数组的子节点的交集。

 类似资料:
  • 下面是一个java类CreateDoc,它从一个作为生产者端的web服务发送到另一个作为消费者端的web服务,其内容类型为:json 下面是类表示 一旦我在消费者端接收到作为json的列表,我就不能将其用作java对象,并且内容类型是数组,其中json嵌套在数组中。 以下是代表: 问题是如何处理这一点,并能够使用数据和表示为列表。

  • 本文向大家介绍如何处理R中的“找不到函数(could not find function)”错误?,包括了如何处理R中的“找不到函数(could not find function)”错误?的使用技巧和注意事项,需要的朋友参考一下 由于以下原因,发生错误“找不到功能”- 函数名称不正确。始终记住,函数名称在R中区分大小写。 尚未安装包含该功能的软件包。在使用包中包含的任何功能之前,我们必须在R中安

  • 问题内容: 在http://golang.org/doc/effective_go.html#arrays阅读了以下内容之后… 数组是值。将一个数组分配给另一个数组将复制所有元素。 特别是,如果将数组传递给函数,它将接收该数组的副本,而不是指向该数组的指针。 ......我希望在下面的代码是从不同的,和的是从不同的。有人可以解释一下下面的代码为什么会改组吗?我知道Go还是一门年轻的语言;也许对数组

  • 有时我使用filter,如您所见,有时如果需要,我使用distinct/sort。但是我仍然有很多运行时错误。 我会很乐意提供一些如何处理它的技巧。 @cricket_007 我的代码: 所以基本上,当我试图用嵌套循环解决这个任务时,我得到了O(n^2)的算法复杂度。如何解决?

  • 问题内容: 我有一种算法,当前会分配很大的双精度数组,它会经常更新和搜索。数组的大小为N ^ 2/2,其中N是算法在其上进行操作的行数。为了与算法周围的应用程序相关联,我还必须保留整个内容的副本。 当然,这对我的算法可以处理的行数施加了限制,因为我要应对堆的限制。到现在为止,我还没有要求使用该算法的人员更新- Xmx设置以分配更多的空间,并且效果很好。但是,我现在遇到了一个真正的问题,我需要此数组

  • 经常会有短暂的组织混乱,比如解雇,收购,IPO,新雇佣,等等。对每个人来说这都是令人不安的,但可能对于那些将自尊建立在能力而非位置上的程序员来讲,这种不安不会那么严重。组织混乱对程序员来讲是锻炼他们的魔力的好机会。因为这是一个集体秘密,在最后我会有所保留。如果你不是一个程序员,就不要再读下去了。 工程师有能力创造与维持。 非工程师可以安排人们,但,在典型的软件公司,如果没有程序员的话,他们不能创造