Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose:如何通过对象的键进行查询_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript Mongoose:如何通过对象的键进行查询

Javascript Mongoose:如何通过对象的键进行查询,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我有一个这样的模式 const CustomersSchema = new mongoose.Schema({ merchant:{ type: mongoose.Schema.Types.ObjectId, required:true, ref: 'Merchent' }, idCustomer:{ type: String, required: true, trim:true, //unique: true },

我有一个这样的模式

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,则按此方式返回文档


编辑:regex也不行,因为我需要按数字搜索(例如:customerData.visions)在未来的

看来,您需要返回文档,无论您是否有“代码>查询”,“名称< /COD>”,如果存在“代码>查询”。“名称< /代码>”,查询将考虑,如果没有“代码>查询”。因此,您可以为此设置一个小逻辑。大概是这样的:

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(...)

看来你需要返回文档,不管你是否有“代码>查询”,“名称< /COD>”,如果有“代码>查询”,“名称< /代码>”,查询将考虑,如果没有“代码>查询”。因此,您可以为此设置一个小逻辑。大概是这样的:

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(...)