【发布时间】:2021-07-21 10:34:57
【问题描述】:
我定义了以下查询,它会获取所有带有id 的项目,该列表位于ids 的给定列表中,状态为active 或retracted。
const query = {
$and : [
{
$or: [
{
status: ‘active’,
},
{
status: ‘retracted’,
},
],
},
{
id: { $in: ids },
},
],
};
每个项目都有一个parent_id 字段,如果项目没有父项,则该字段可以是null,也可以是父项的id。
我希望我的查询获取所有带有我提供的 ids 的项目,以及它们的父项目(如果存在这样的父项目)。
例如,如果我提供以下 ID
[1,2,3]
并且项目 2 有一个 id 为 5 的父项,而项目 1 和 3 的 parent_id 设置为 null,我希望我的查询返回以下项目:
[1,2,3,5].
为此,我编写了以下查询:
const collection = db.collection(‘myCollection’);
const data = await collection.aggregate([
{$match : query},
{
$lookup: {
from: ‘myCollection’,
let: { parentID: ‘$parent_id’},
pipeline: [
{
$match: {
$expr: {
$eq: [‘$id’, ‘$$parentID’],
},
},
},
as: ‘parent’,
},
},
]).sort(‘created_date’, ‘desc’).toArray();
return data;
但是,这总是返回 null。
样本数据:
[
{
id: 1,
parent_id: 3,
data: ‘bla bla’
},
{
id: 2,
parent_id: null,
data: ‘bla bla bla’
},
{
id: 3,
parent_id: null,
data: ‘bla’
}
]
输入:[1]
输出:
[
{
id: 1,
parent_id: 3,
data: ‘bla bla’
},
{
id: 3,
parent_id: null,
data: ‘bla’
}
]
【问题讨论】:
-
尝试删除 .toArray()
-
@NikitaMazur 当我删除 toArray 时,我获得了一个具有一堆属性的对象 - 我需要一个结果集,它是一个数组,但可以在我的代码中进行进一步处理
-
@mickl 刚刚添加到问题中
标签: javascript database mongodb mongodb-query nosql