我正在尝试进行明智的分组警报,当用户访问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
,我还应该通过什么?还是应该重组它?
答案 0 :(得分:0)
只需使用以下内容更改您的比赛阶段:
...,
$match:
{
"master_id": null,
"related_record.user_id": 1
}