猫鼬:如何通过对象的键查询

穆罕默德·奥拉比(Mohamed Oraby)

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

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)

Ankita Kuchhadiya

似乎您需要返回文档,无论您是否拥有文档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(...)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章