我在两个集合的文档中有一个名为id(不是_id)的字段。我需要将第一个集合的内容与第二个集合的内容进行比较。基本上,我需要知道集合'A'中存在具有给定值'id'的文档,而不是'B'。从Collection A构建一个id数组的最简单方法是什么,我可以使用它来做类似下面的事情。 :
db.B.find({id:{$nin: array_of_ids_from_coll_A}})
请不要挂断为什么我在这种情况下使用'id',而不是'_id'。感谢。
答案 0 :(得分:1)
严格地说,这并没有回答'如何构建一个......的数组'的问题,但是我会迭代集合A
,并且对于每个元素,尝试找到匹配的B.如果未找到,请添加到列表中。
这对数据库有很多往返,所以它不是很快,但它非常简单。此外,如果A
包含大量元素,则id数组可能太大而无法将所有元素抛出$nin
,否则必须通过拆分id数组来解决这些问题。更糟糕的是,无论如何$nin
对索引效率不高。
答案 1 :(得分:0)
我错误地认为函数'distinct'基于给定的'field'返回了一组不同的文档。实际上,它提供了一个不同值的数组,提供了一个特定的字段。所以,我能够使用db.A.distinct('id')构建我正在寻找的数组。感谢任何花时间阅读这个问题的人。无论如何。