首页 > 解决方案 > 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' ] }}]}      
]} 

标签: javascriptmongodb

解决方案


推荐阅读