【问题标题】:Mongoose: how to query by a key of an objectMongoose:如何通过对象的键进行查询
【发布时间】:2019-12-25 18:10:09
【问题描述】:

我有一个看起来像这样的架构

const CustomersSchema = new mongoose.Schema({
  merchant:{
    type: mongoose.Schema.Types.ObjectId,
    required:true,
    ref: 'Merchent'
  },
  idCustomer:{
    type: String,
    required: true,
    trim:true,
    //unique: true
  }, 
  customerData:{
   type:Object,
   required:true
  }
});

和 customerData 看起来像

{
   "name": "Other",
   "birthday": null,
   "age": null,
   "createdAt": "2019-04-01T20:01:04.000Z",
   "email": null,
   "visits": 0,
   "payments": "0.00",
   "lastVisit": "2019-12-16T12:58:09.000Z",
}

有没有办法可以通过 customerData.name 进行查询,如果不存在就不会导致错误

我现在可以

let query = {
    merchant: merchant._id,
    'customerData.name': req.query.name
}
Customer.find(query)
  .then(...)

但是这样如果没有query.name就没有文档返回

编辑:正则表达式也不会这样做,因为我将来需要按数字搜索(例如:customerData.visits)

【问题讨论】:

    标签: javascript node.js mongodb express mongoose


    【解决方案1】:

    无论您是否有query.name,您似乎都需要返回文档,如果有query.name,查询将考虑这一点,如果没有query.name,则不会考虑这一点。因此,您可以为此设置一个小逻辑。像这样的:

    let query = {
      merchant: merchant._id
    };
    // we only set the query for the customerData.name if query.name exist
    if(req.query.name) {
      query['customerData.name'] = req.query.name;
    }
    Customer.find(query)
      .then(...)
    

    【讨论】:

      猜你喜欢
      • 2017-08-15
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 2021-04-04
      • 2012-03-10
      • 1970-01-01
      • 2017-08-04
      相关资源
      最近更新 更多