提问人:fanbondi 提问时间:8/9/2023 最后编辑:kenmistryfanbondi 更新时间:10/24/2023 访问量:22
MongoDB使用聚合过滤掉某些数组元素并返回一个对象
MongoDB filter out certain array elements using aggregation and return an object
问:
我在下面有MongoDB中的数据结构表示一个订单。
order_id: 1
customer name: Peter
items: [{id:1, name: Laptop, shop_id: 10, id:2, name: Router, shop_id: 2}]
customer:{key:val, key2:val2}
date: 21-04-2023
isDeleted: False
我有两个界面,一个用于管理员,一个用于店主。在我的管理面板上,我想在不过滤的情况下显示所有订购的项目。下面的代码给了我:
Parse.Cloud.define('getOrderWithUser', async (req) => {
const { master, params, user, } = req
const query = new Parse.Query('Order')
query.include('customer')
query.include('items')
query.notEqualTo('isDeleted', true)
return query.get(params.id, { useMasterKey: true })
})
但是,对于我需要过滤掉商品内容的店主,例如仅 shop_id = 10。我使用聚合管道和函数,如下面的代码所示。unwind
Parse.Cloud.define('getOrderWithUser', async (req) => {
var pipeline = [
{match: {
objectId: {$eq: params.id},
isDeleted: {$ne: true}
}},
{unwind: "$items"},
{
match: {'items.shop_id': 10}}
},
{group:{
objectId: params.id,
data: { $first : "$$ROOT" },
items: {$push : "$items"}
}
},
{ replaceRoot: { newRoot: "$data" }}
]
const query = new Parse.Query('Order')
query.include('customer')
query.include('items')
return query.aggregate(pipeline, { useMasterKey: true })
})
问题是,聚合方法不起作用,它返回一个对象数组 [{}] 而不仅仅是一个对象 {}。也许我没有正确地解决这个问题,我想要的只是根据用户类型(管理员或店主)在数组中过滤掉。items
答: 暂无答案
评论