javascript - MongoDB 检查键是否存在并具有特定值
问题描述
我是 MongoDB 的绝对初学者,我有一个无法解决的问题。
我有一个如下所示的请求集合:
{ ->document one
id...
Category:[Car]
Color:[Black,White]
Fuel Type:[Diesel, Gasoline]
}
{ ->document two
id..
Category:[Car]
}
我在 JavaScript 中有一个 Product 对象,如下所示:
let newObj: {
Category: 'Car',
Model: 'BMW',
'Production age': 1997,
'Fuel Type': 'Diesel',
Color: 'White',
'Mileage (km)': '75213',
Price: '9000',
Electric: 'Yes',
'Mile range': '300'
}
我想从包含一个键和一个特定值的请求集合中获取所有文档。为了更好地理解:
在我的情况下,Category=Car 和 Color=White 所以我想返回这两个文件。如果 Category=Car 但 Color=Red 我只想返回第二个文档 如果其他字段不存在,我只关心匹配的字段。
let findArgs={}
for (const [key, value] of Object.entries(product.newObj)) {
filterArgs[key]={$exists: true,$in:[value]}
}
let result= await requestColl.aggregate([
{$match: filterArgs },
{$sort: {[sortBy]:order}},
]).toArray();
这是将在 {match:} 中的 filterArgs 查询
{
Category: { '$exists': true, '$in': [ 'Car' ] },
Model: { '$exists': true, '$in': [ 'BMW' ] },
'Production age': { '$exists': true, '$in': [ 1997 ] },
'Fuel Type': { '$exists': true, '$in': [ 'Diesel' ] },
Color: { '$exists': true, '$in': [ 'White' ] },
'Mileage (km)': { '$exists': true, '$in': [ '75213' ] },
Electric: { '$exists': true, '$in': [ 'Yes' ] },
'Mile range': { '$exists': true, '$in': [ '300' ] }
}
我怎样才能实现上述目标?提前致谢。
更新
我尝试进行这样的查询,但仍然由于两个文档中都存在 Car ,我无法获得特定的文档。
{ $or:
[ { $and: [{ Category: { '$in': [ 'Car' ]}}]},
{ $and: [ { Category: { '$in': [ 'Car' ]}}, { Color: { '$in': [ 'White' ] }}]}
]}
解决方案
推荐阅读
- typescript - 错误:浏览器放大时元素未设置位置
- jquery - 使用 jQuery 在 HTML 元素后检查空
- image-processing - 如何检测图像中的 secchi 磁盘标记?
- python - python程序每8秒更换一次windows壁纸
- c++ - glVertexAttribDivisor 不存在
- svn - SVN - 是否可以以交互方式在终端中添加/删除多个文件?
- kubernetes - Apache Cassandra:无法在 Kubernetes/Ubuntu 服务器上使用任何种子进行八卦
- python - 根据 argparser 参数在运行时更新 YAML 配置文件
- arrays - Postgres数据库中的json查询
- java - 如何通过程序创建变量来计算瓷砖的数量