我不太确定如何标题这个!
所以我有一系列产品ID
var productIds = [139,72,73,1,6]
MongoDB中的一堆客户文档
{
name: 'James',
products: [ 73, 139 ],
_id: 5741cff3f08e992598d0a39b
}
{
name: 'John',
products: [ 72, 99 ],
_id: 5741d047f08e992598d0a39e
}
我希望在所有产品出现在产品ID数组(productIds)中时找到客户
我试过了:
'products' : {
'$in': productIds
}
但即使产品ID列表中不存在99
,它也会返回John我也尝试过:
'products' : {
'$all': productIds
}
由于没有客户拥有所有产品
,因此不返回任何内容有没有办法在单个查询中实现我需要的东西,或者我将不得不进行一些后期查询处理?
我也试过
'products': {
'$in': productIds,
'$not': {
'$nin': productIds
}
}
但是,当并非所有产品ID都匹配时,这似乎也会返回客户
答案 0 :(得分:2)
您可以使用.aggregate()
方法和$redact
运算符执行此操作。在$cond
表达式中,您需要使用$setIsSubset
来检查“products”数组中的所有元素是否都在“productIds”中。这是因为您无法在条件表达式
$in
var productIds = [139,72,73,1,6];
db.customers.aggregate([
{ "$redact": {
"$cond": [
{ "$setIsSubset": [ "$products", productIds ] },
"$$KEEP",
"$$PRUNE"
]
}}
])