gpt4 book ai didi

node.js - 使用案例在 mongodb 中查找查询

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

我有一个产品集合,其中有这样的文档

"_id" : ObjectId("5acb1dad698eaa7a254c9017"),
"txtProductCode" : "1233A",
"txtModelCode" : "00M",
"txtPartNo" : "00P",
"txtSerialNo" : "00S",
"txtProductName" : "Watch",
"traderId" : ObjectId("5ac5fb29b0f9b3444e6c1ef2")

我想根据我使用的名称和 traderId 搜索产品

db.getCollection('product').find( {$and:[{'txtProductName':"Watch"},{"traderId" : ObjectId("5ac5fb29b0f9b3444e6c1ef2")}]})

它工作正常,但现在如果用户输入了型号,那么它也应该使用型号来搜索产品,如果用户没有输入型号,那么它应该没有型号

所以我的问题是我是否必须使用这样的案例

if(req.body.modelNo)
db.getCollection('product').find( {$and:[{'txtProductName':"Watch"},{"traderId" : ObjectId("5ac5fb29b0f9b3444e6c1ef2")},{'txtModelCode':"00M"}]})
else
db.getCollection('product').find( {$and:[{'txtProductName':"Watch"},{"traderId" : ObjectId("5ac5fb29b0f9b3444e6c1ef2")}]})

或者有没有一种方法可以在不创建案例的情况下执行此操作,我必须在多种条件下执行此操作,所以我尝试不使用案例

最佳答案

首先创建查询对象,然后通过条件检查添加额外的键。无需显式使用 $and 运算符指定隐式提供的以逗号分隔的表达式列表时:

let query = {
'txtProductName': 'Watch',
'traderId': ObjectId('5ac5fb29b0f9b3444e6c1ef2')
};

if (req.body.modelNo) query['txtModelCode'] = req.body.modelNo;
db.getCollection('product').find(query);
<小时/>

如果使用$and 运算符,您可以将附加查询推送到数组中,然后使用该列表作为 $and 运算符:

let andOperator = [
{ 'txtProductName': 'Watch' },
{ 'traderId': ObjectId('5ac5fb29b0f9b3444e6c1ef2') }
];

if (req.body.modelNo) andOperator.push({ 'txtModelCode': req.body.modelNo });
// if (req.body.modelNo) andOperator = [...andOperator, { 'txtModelCode': req.body.modelNo }];
db.getCollection('product').find({ '$and': andOperator });

关于node.js - 使用案例在 mongodb 中查找查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49770631/

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