首页 > 解决方案 > 如何使用 JavaScript 获得由 MongoDB 中 $in 运算符中使用的相同查询过滤的属性投影?

问题描述

我有这个文件

User A: {_id: xxxx, id: A, contacts: ['B', 'C'] }
    
User B:  {   _id: xxxx,   id: B,   contacts: ['A', 'D'] }

User C: {   _id: xxxx,   id: C,   contacts: ['D'] }
       
User D:  {   _id: xxxx,   id: D,   contacts: ['A', 'B'] }

我当前的代码:

User.find({contacts: { $in: ['A', 'B']}}, { _id: 0, id: 1, contacts: 1})

结果:

[{
   _id: xxxx,
   id: A,
   contacts: ['B', 'C']
},{
   _id: xxxx,
   id: B,
   contacts: ['A', 'D']
},{
   _id: xxxx,
   id: D,
   contacts: ['A', 'B']
}]

预期结果:(我只想通过查询数组过滤属性联系人->在本例中为[A,B])

[{
   _id: xxxx,
   id: A,
   contacts: ['B']
},{
   _id: xxxx,
   id: B,
   contacts: ['A']
},{
   _id: xxxx,
   id: D,
   contacts: ['A', 'B']
}]

我尝试过聚合,结果相同。

非常感谢您提前。

标签: javascriptmongodb

解决方案


尝试从 MongoDB 4.4 开始的聚合投影运算符,

  • $filtercontacts根据输入数组迭代数组循环和过滤
db.collection.find({ contacts: { $in: ["A", "B"] } },
{
  _id: 0,
  id: 1,
  contacts: {
    $filter: {
      input: "$contacts",
      cond: { $in: ["$$this", ["A", "B"]] }
    }
  }
})

操场


推荐阅读