Javascript Mongoose$elemMatch如何查询$in和$nin

Javascript Mongoose$elemMatch如何查询$in和$nin,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我使用Mongoose是为了检查我的数据库中是否存在元素 为此,我使用了类似于- object.aggregate([ {$match:{ “数据”:{ $elemMatch:{ 美元及:[ {name:{$in:[“A”,“B”]}, {name:{$nin:[“X”]} ] } } } } ])您可以尝试使用简单的查找查询 db.collection.find({ "data": { "$elemMatch": { "$and": [ { "fiel

我使用Mongoose是为了检查我的数据库中是否存在元素

为此,我使用了类似于-

object.aggregate([
{$match:{
“数据”:{
$elemMatch:{
美元及:[
{name:{$in:[“A”,“B”]},
{name:{$nin:[“X”]}
]
}
}
}
}

])
您可以尝试使用简单的查找查询

db.collection.find({
  "data": {
    "$elemMatch": {
      "$and": [
        { "field.name": { "$in": [ "A", "B" ] } },
        { "field.name": { "$nin": [ "X" ] } }
      ]
    }
  }
}, {
  "data": {
    "$elemMatch": {
      "$and": [
        { "field.name": { "$in": [ "A", "B" ] } },
        { "field.name": { "$nin": [ "X" ] } }
      ]
    }
  }
})

试试看

你能发布一些你的样本收集和输出吗?汉克斯,我在“编辑”下添加了一个示例。查询找到了应该排除的示例2。我猜是因为在数组中的一个元素中,doc满足了第一个条件,而另一个数组元素满足了另一个条件condition@HatzavWolff请检查这里首先感谢操场链接,我不知道这个!对于我的例子来说,你的答案很好,我接受它,但我的真实数据集包含另一层,这可能是问题所在。我将添加示例作为编辑2-非常感谢您对我的帮助!我喜欢这个解决方案,使用点符号结合$elemMatch。我认为唯一的问题是$elemMatch在$projection阶段只返回第一个事件,而不是所有的事件results@ChaiHalfon是如果要检索所有匹配的文档,则必须使用
$filter
聚合