合并和减去来自不同大学的项目

时间:2019-06-03 07:52:51

标签: python mongodb mongodb-query

不好意思,我是MongoDB的新手。我正在收集树,其中一个是其他两个元素不重叠的超集。每个项目都由唯一的字符串ID区分。我想要的是获取其他两个集合中未包含的超集的项。您能为我提供一些有关如何有效执行此操作的提示吗?

谢谢。

编辑:

超集结构: { "_id" : 1, "str_id" : "ABC1fd3fsewer", "date": "a day" }

子集1的结构:{ "_id" : 1, "str_id" : "ABre1fd3fsewer", "description" : "product" }

子集2的结构:{ "_id" : 1, "str_id" : "ABC1fd3fsewfe"}

每个集合都有不同的结构,但都有一个共同的字段str_id

EDIT由@Neel建议改进 我有以下格式:

parent = [{'str_id':'a', 'tag1':'parent_random', 'tag2': 'parent_random', 'tag3':'parent_random'},{'str_id':'b',...},{'str_id':'c',...},{'str_id':'d',...}...]
child1 = [{'str_id':'a', 'tag2': child1_random'},{'str_id':'b', 'tag2': 'child1_random'}]
child2 = [{'str_id':'c', 'tag1':'child2_random'}]

我想要

outcome = [{'str_id':'c', 'tag1':'parent_random', 'tag2': 'parent_random', 'tag3':'parent_random'},{'str_id':'d', 'tag1':'parent_random', 'tag2': 'parent_random', 'tag3':'parent_random'}]

1 个答案:

答案 0 :(得分:0)

听起来您需要汇总操作。

此文档可能会帮助您: Lookup in an array

您可以使用一个聚合操作进行多次查找,以便可以检查两个子集。

我将假设您正在使用REST API,并且客户端正在从超集集合发送对文档子集的请求。您可以从客户端的超集发送要检查的文档数组,然后:

1-将超集中的所有文档与您要发送的文档数组进行匹配

2-展开超集文档数组

3-在“ str_id”字段中查找子集集合并将其设置为“ subset_one_results”之类的字段。

4-对两个子集结果执行匹配操作,该操作将在“ subset_one_results”上返回一个空数组...例如,这将匹配子集1中包含的所有的超集文档。

$match({ $and : { "subset_one_results" : { $eq : [] } }, { "subset_two_results" : { $eq : [] } } })

5-如果要将它们作为数组返回给客户端,则将它们分组到新数组中。

要提高操作性能,您必须确定发出此请求的频率。如果存在经常出现的风险,请确保在不是不是ObjectId字段的情况下,在该字段上创建一个索引。从您的代码中我无法确定您使用的是自定义字符串字段还是ObjectId,这就是为什么我要提出这一点。

我不知道您要使用什么来进行查询(纯MongoDB查询语言,驱动程序等),因此我不确定如何用代码来回答问题,因此描述了上面的步骤。