【发布时间】:2021-12-16 15:34:38
【问题描述】:
我正在尝试获取具有空 cards 数组的 boards.lists 或一些未归档的卡片,但使用 $match 和 $or 运算符不起作用。我该如何解决这个问题??
示例文档如下:
{
_id: ObjectId("616bcd746bfed71fdcf892c3"),
userId: ObjectId("611cb3a14f142d5d94daa395"),
name: "myworkspace",
description: "",
boards: [
{
_id: ObjectId("6175f8c69c03810ea8e7b31e"),
name: 'myboard',
color: '',
labels: [
{ color: 'blue', title: 'project1' }
],
lists: [
{
archived: true,
_id: ObjectId("6175f8c69c03810ea8e7b321"),
cards: []
},
{
archived: false,
_id: ObjectId("6175f8c69c03810ea8e7b322"),
cards: []
},
{
archived: false,
_id: ObjectId("6175f8c69c03810ea8e7b323"),
cards: [{
_id: ObjectId("61721cbc3092d32970cf2fed")
archived: true,
labelSelected: [],
title: "mycard",
description: "",
attachments: [],
comments: []
}]
},
{
archived: false,
_id: ObjectId("6175f8c69c03810ea8e7b324"),
cards: [{
_id: ObjectId("6175f8d09c03810ea8e7b32d")
archived: false,
labelSelected: [],
title: "mycard",
description: "",
attachments: [],
comments: []
}]
},
]
}
]
}
我做了什么:
docs = await WorkspaceModel.aggregate([
{ $match: { _id: mongoose.Types.ObjectId(workspaceId) } },
{ $unwind: "$boards" },
{ $match: { "boards._id": mongoose.Types.ObjectId(boardId) } },
{ $unwind: "$boards.lists" },
{ $match: { "boards.lists.archived": false } },
{
$unwind: {
path: "$boards.lists.cards",
preserveNullAndEmptyArrays: true,
},
},
{
$match: {
$or: [
{ "boards.lists.cards": { $exists: true, $size: 0 } },
{ "boards.lists.cards.archived": false }
]
},
},
{
$group: {
_id: "$boards._id",
name: { $first: "$boards.name" },
color: { $first: "$boards.color" },
labels: { $first: "$boards.labels" },
lists: { $addToSet: "$boards.lists" },
},
},
]).exec();
我得到的是:[],在$match 语句之前,它只显示了所有未归档的列表。
我的期望:
[
{
_id: ObjectId("6175f8c69c03810ea8e7b31e"),
name: 'myboard',
color: '',
labels: [
{ color: 'blue', title: 'project1' }
],
lists: [
{
archived: false,
_id: ObjectId("6175f8c69c03810ea8e7b322"),
cards: []
},
{
archived: false,
_id: ObjectId("6175f8c69c03810ea8e7b324"),
cards: [{
_id: ObjectId("6175f8d09c03810ea8e7b32d")
archived: false,
labelSelected: [],
title: "mycard",
description: "",
attachments: [],
comments: []
}]
},
]
}
]
【问题讨论】:
标签: mongodb mongoose aggregation-framework