gpt4 book ai didi

node.js - 如何比较数组mongodb查询

转载 作者:太空宇宙 更新时间:2023-11-03 23:57:02 24 4
gpt4 key购买 nike

我目前正在我的 mongodb 电子商务应用程序上构建购物车系统。我需要有关如何查询和比较数组的帮助。

这里是购物车文档:

{
"_id" : ObjectId("5d0531e27c8fa1029017ea20"),
"user" : ObjectId("5d0371319315c715fc34b0b0"),
"active" : true,
"item" : [
{
"product" : ObjectId("5d013eb63a2bdd11a46c8dd3"),
"option" : [
{
"name" : "Ukuran",
"value" : "Biru"
}
],
"quantity" : 1
},
{
"product" : ObjectId("5d013eb63a2bdd11a46c8dd3"),
"option" : [
{
"name" : "Ukuran",
"value" : "Biru"
}
],
"quantity" : 1
}
],
"created_at" : ISODate("2019-06-15T17:58:58.762Z"),
"updated_at" : ISODate("2019-06-15T17:59:13.334Z"),
"__v" : 0
}

我想比较 item.option 字段的对象,所以我的购物车系统是,如果数据库上的购物车具有相同的对象选项,我将添加数量,否则将新对象推送到项目。

所以目前我不是问如何实现我的购物车系统,而是我想比较每个 item.option 对象

我已经尝试过了

const cart = await CartModel.find({
"item.option": option
})

并得到错误错误:查询过滤器必须是一个对象,得到一个数组

最佳答案

我自己解决了,经过多次实验最终我结合 $in 和 $elemMatch 来比较每个对象数组

// this is will dynamic
const optionArray = [
{
"name": "Warna",
"value": "Biru"
},
{
"name": "Ukuran",
"value": "XL"
}
]

const compareOptionQuery = []

for (let i = 0; i < optionArray.length; i++) {
compareOptionQuery.push({
$elemMatch: {
...option[i]
}
})
}

const cart = await CartModel.aggregate([
{
$and: [
{
_id: cartId,
user: userId
},
{
'item.option': {
$in: [...compareOptionQuery]
}
}
]
}
])

关于node.js - 如何比较数组mongodb查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56613078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com