Node.js mongodb中$nin的非严格行为

Node.js mongodb中$nin的非严格行为,node.js,mongodb,mongoose,aggregation-framework,Node.js,Mongodb,Mongoose,Aggregation Framework,mongodb中是否有非严格的$nin版本?比如说 假设我们有一个名为User的模型和一个名为task的模型 var TaskSchema = new Schema({ user_array: [{user: Schema.ObjectId}], }); 这是一个快速的样本 task1 : [user1, user2, user4, user7] task2 : [user2, user 5, user7] 如果我有一个用户列表 [user1, user7] 我想选择在user_数

mongodb中是否有非严格的$nin版本?比如说

假设我们有一个名为User的模型和一个名为task的模型

var TaskSchema = new Schema({
    user_array: [{user: Schema.ObjectId}],
});
这是一个快速的样本

task1 : [user1, user2, user4, user7]
task2 : [user2, user 5, user7]
如果我有一个用户列表

[user1, user7]
我想选择在user_数组中重叠最少的任务,在本例中task2,我知道$nin严格返回既不包含user1也不包含user7的任务,但我想知道是否存在$nin不严格的操作

或者,我可以为我写一个DP函数

如有任何建议,将不胜感激


感谢

在MongoDB 2.6版及更高版本中,您有可用的and运算符,因此您可以执行如下语句:

db.collection.aggregate([
{“$project”:{
“用户_数组”:1,
“大小”:{“$size”:{
“$setIntersection”:[“$user_数组”、[“user1”、“user7”]]
}}
}},
{“$match”:{“size”:{“$gt”:1},
{“$sort”:{“size”:1},
{“$组”:{
“\u id”:空
“user_数组”:{“$first”:“$user_数组”}
}}
])
因此,这些操作符有助于减少查找最不匹配文档所需的步骤

基本上,将数组中的匹配元素返回到要与之进行比较的元素。运算符返回结果数组的“大小”。因此,稍后您将使用
$match
筛选出在数组中未找到匹配列表中任何项的任何文档

最后,您只需排序并返回匹配“最少”的项

但在早期版本中,仍然可以通过更多步骤来完成。因此,基本上,您的“非严格”实现成为一个条件。但当然,您仍然需要计算匹配项:

db.collection.aggregate([
{“$project”:{
“_id”:{
“\u id”:“$\u id”,
“用户数组”:“$user\u数组”
},
“用户_数组”:1
}}
{“$unwind”:“$user_数组”},
{“$match”:{
“$or”:[
{“user_数组”:“user1”},
{“user_数组”:“user7”}
]
}},
{“$组”:{
“\u id”:“$\u id”,
“大小”:{“$sum”:1}
}},
{“$sort”:{“size”:1},
{“$组”:{
“_id”:空,
“user_数组”:{“$first”:“$\u id.user_数组”}
}}
])

这也可以做同样的事情。

谢谢,它成功了,尽管我很确定它为什么成功,但目前它返回了包含0个重叠的最小重叠列表,这正是我想要的,但是我认为您使用
$gt:1
选项消除了该选项?