MongoDB-查找没有父文档参考的记录

时间:2018-09-24 14:35:25

标签: node.js mongodb mongoose lookup

我正在尝试进行明智的分组警报,当用户访问node.js网站时,他们会通过克隆用于存储各个警报视图状态的实际文档来获得警报。 警报集合的基本示例数据如下。

db.alerts.insertMany([
  {
    "text" : "Alert 1",
  },
  {
    "text" : "Alert 2",
  },
  {
    "_id": ObjectId("5ba8e5ef24e03456b5cb0afa"),
    "text" : "Alert 3",
  },
  {
    "_id": ObjectId("5ba8e5ef24f03456b5cb0afa"),
    "text": "Alert 4"
  },
  {
    "text": "Alert 4",
    "master_id": ObjectId("5ba8e5ef24f03456b5cb0afa"),
    "user_id": 1
  },
  {
    "text": "Alert 3",
    "master_id": ObjectId("5ba8e5ef24e03456b5cb0afa"),
    "user_id": 1
  },
  {
    "text": "Alert 4",
    "master_id": ObjectId("5ba8e5ef24f03456b5cb0afa"),
    "user_id": 2
  },
]);

如果我使用$lookup,则可以通过执行以下操作来获取没有子文档的文档

db.getCollection('alerts').aggregate([
    {
        $lookup: {
            from: "alerts",
            localField: "_id",
            foreignField: "master_id",
            as: "related_record"
        }
    },
    {
        $match: {
            "master_id": null,
            "related_record": {$eq: []}
        },
    }
]);

但是,如果我必须专门针对user_id: 1,我还应该通过什么?还是应该重组它?

1 个答案:

答案 0 :(得分:0)

只需使用以下内容更改您的比赛阶段:

...,
$match:
{
  "master_id": null,
  "related_record.user_id": 1
}