返回集合中的所有文档,但向满足查询条件的文档添加关键字

时间:2020-07-08 21:46:53

标签: node.js mongodb mongoose mongodb-query aggregation

我是MongoDB的新手。

我想知道是否可以实现这样的目标?

users Collection : 

    [
      {
        name : "John",
        Gender : "Male",
      },
      {
        name : "Alex",
        Gender : "Male",
      },
      {
        name : "Eva",
        Gender : "Female",
      }
    ]
    db.users.find({Gender : "Male"});

    Response :

    [
      {
        name : "John",
        Gender : "Male",
        isMatchingQuery : true,
      },
      {
        name : "Alex",
        Gender : "Male",
        isMatchingQuery : true,
      },
      {
        name : "Eva",
        Gender : "Female",
        isMatchingQuery : false,
      }
    ]

我们能得到这样的结果吗?每个文档都作为响应返回,但是满足查询条件的文档具有添加了值为true的键,而另一些则不满足为false。有可能通过聚合吗?

3 个答案:

答案 0 :(得分:1)

请在一行中使用它:

db.users.aggregate([{$set:{"isMatchingQuery":{$eq:["$Gender","Male"]}}}])

签出playground

答案 1 :(得分:0)

aggregation framework这样的事情是可能的。

它看起来像这样:

db.users.aggregate([
  {
    $set: { "isMatchingQuery": { $eq: [ "$Gender", "Male" ] } }
  }
])

答案 2 :(得分:0)

感谢大家的帮助。有趣的是,在挖掘更多内容时,我发现了另一种方法可以做到这一点。有点黑。

db.users
    .aggregate([
      {
        $project: {
          _id: 1,
          isMatchingQuery: {$eq: ["$Gender", "Male"] },
          name: 1,
        },
      },
    ])

如果某人只需要响应中的特定键,则一次为$ set和$ project进行工作。