假设我有一个作业集合:
{
_id: ObjectId("1"),
tags: []
}
{
_id: ObjectId("2"),
tags: ["A"]
}
{
_id: ObjectId("3"),
tags: ["A", "B"]
}
{
_id: ObjectId("4"),
tags: ["A", "B", "C" ]
}
如何根据作业tags
和一些作业query_tags
之间的集合运算来查询一些作业?具体地说,就是:
1.获取tags
是query_tags
的超集的所有作业
示例:query_tags = ["A", "B" ]
->获取ID为3和4的作业
1.获取tags
是query_tags
的子集的所有作业
示例:query_tags = ["A", "XXXX"]
->获取ID为1和2的作业
1.获取tags
和query_tags
的并不为空的所有作业
示例:query_tags = ["A", "XXXX"]
->获取ID为2、3和4的作业
示例2:query_tags = ["B", "XXXX"]
->获取ID为3和4的作业
注意:对于案例1,我可能可以使用$all,但是案例2和案例3呢?
1条答案
按热度按时间qoefvg9y1#
1.超集:使用
$setIsSubset
这是供您参考的Mongo Playground。
1.子集:使用
$setIsSubset
,但相反这是供您参考的Mongo Playground。
1.套装组合:这一套让我有点困惑。只要您的
query_tags
是非空的,集合并集就总是非空的,所以应该返回每个文档。不过,您可以使用$setUnion
。这是供您参考的Mongo Playground。