Moh*_*aby 2 javascript mongoose mongodb node.js express
我有一个看起来像这样的架构
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
}
});
Run Code Online (Sandbox Code Playgroud)
和 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",
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以通过 customerData.name 进行查询,如果它不存在,也不会导致错误
现在我做
let query = {
merchant: merchant._id,
'customerData.name': req.query.name
}
Customer.find(query)
.then(...)
Run Code Online (Sandbox Code Playgroud)
但这样如果没有 query.name 则不会返回任何文档
编辑:正则表达式也不会这样做,因为我将来需要按数字搜索(例如:customerData.visits)
看来你需要返回文档,无论你是否有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(...)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1288 次 |
| 最近记录: |