Node.js 使用案例在mongodb中查找查询
我有一个产品集合,其中有这样的文档Node.js 使用案例在mongodb中查找查询,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个产品集合,其中有这样的文档 "_id" : ObjectId("5acb1dad698eaa7a254c9017"), "txtProductCode" : "1233A", "txtModelCode" : "00M", "txtPartNo" : "00P", "txtSerialNo" : "00S", "txtProductName" : "Watch", "traderId" : ObjectId("5ac5fb29b0f9b3444e6c1ef2") if(req.body
"_id" : ObjectId("5acb1dad698eaa7a254c9017"),
"txtProductCode" : "1233A",
"txtModelCode" : "00M",
"txtPartNo" : "00P",
"txtSerialNo" : "00S",
"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")}]})
我想根据我使用的产品名称和traderId搜索该产品
db.getCollection('product').find( {$and:[{'txtProductName':"Watch"},{"traderId" : ObjectId("5ac5fb29b0f9b3444e6c1ef2")}]})
它工作正常,但是现在如果用户输入了型号,那么它应该使用型号来搜索产品如果用户没有输入型号,那么它应该没有型号
所以我的问题是我必须使用这样的用例吗
"_id" : ObjectId("5acb1dad698eaa7a254c9017"),
"txtProductCode" : "1233A",
"txtModelCode" : "00M",
"txtPartNo" : "00P",
"txtSerialNo" : "00S",
"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")}]})
或者有没有一种方法可以在不生成case的情况下执行此操作?我必须对多个条件执行此操作,因此我尝试不使用cases创建查询对象,然后使用条件检查添加额外的键。指定以逗号分隔的表达式列表时,无需显式使用运算符,因为它是隐式提供的:
let query = {
'txtProductName': 'Watch',
'traderId': ObjectId('5ac5fb29b0f9b3444e6c1ef2')
};
if (req.body.modelNo) query['txtModelCode'] = req.body.modelNo;
db.getCollection('product').find(query);
如果使用运算符,则可以将附加查询推送到数组中,然后使用运算符的列表:
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 });
我会这样做的 首先,您应该向后端发送一个特定from的json。比如说
[{'txtModelCode':"00M"},{'txtPartNo':"AC"},{'Yts':"xyz"}]
OR
[{'txtModelCode':"00M"},{'txtPartNo':"AC"}]
OR
[{'txtModelCode':"00M"}]
这是您应该在req.body
中预期的有效负载。最后,您可以在find()
条件中使用它。差不多
db.getCollection('product').find( {$and:[{'txtProductName':"Watch"},
{"traderId" : ObjectId("5ac5fb29b0f9b3444e6c1ef2")}, ...req.body]})
…
称为扩展运算符扩展语法允许扩展数组表达式或字符串等iterable。阅读更多关于它的信息
这将使它完全充满活力。集合中的任何缩放都可以直接用于find
条件。您永远不必添加额外的代码行