当前在使用MongoDB聚合时遇到了问题。我有一个'_ids'数组需要检查是否存在于特定集合中。
示例:
我在“集合1”中有3条记录,它们具有_id 1,2,3。我可以使用以下方式找到匹配的值:
$match: {
_id: {
$in: [1, 2, 3, 4]
}
}
但是我想知道的是我传入的值(1,2,3,4)。哪些不符合记录。 (在这种情况下,_id 4将没有匹配的记录)
因此,与其返回不具有_id 1、2、3的记录,它需要返回不存在的_id。所以在这个例子中'_id:4'
查询还应忽略集合中的任何额外记录。例如,如果集合包含ID为1-10的记录,并且我传递了一个查询来确定_ids:1、7、15是否存在。我期望的值将与'_id:15不存在
首先想到的是使用聚合中的$ project来保存传入的每个_id,然后将每个记录附加到集合中。传递给匹配的_id。例如:
Record 1:
{
_id: 1,
Collection1: [
record details: ...,
...
...
]
},
{
_id: 2,
Collection1: [] // This _id passed in, doesn't have a matching collection
}
但是在这种情况下似乎无法获得有效的示例。任何帮助将不胜感激!
答案 0 :(得分:1)
如果输入文档为:
{ _id: 1 },
{ _id: 2 },
{ _id: 5 },
{ _id: 10 }
要匹配的数组是:
var INPUT_ARRAY = [ 1, 7, 15 ]
以下汇总:
db.test.aggregate( [
{
$match: {
_id: {
$in: INPUT_ARRAY
}
}
},
{
$group: {
_id: null,
matches: { $push: "$_id" }
}
},
{
$project: {
ids_not_exist: { $setDifference: [ INPUT_ARRAY, "$matches" ] },
_id: 0
}
}
] )
返回:
{ "ids_not_exist" : [ 7, 15 ] }
答案 1 :(得分:0)
您要查找$ not吗? MDB Docs