如何填充如果字段不是空字符串如果为空则不需要填充
How to populate if field is not empty string if empty no need to populate?
我有一个应用程序,它以前在mongoDB中保存了大量数据。现在,如果referencePeople不是空字符串,我需要填充一些信息。在我的应用程序中,referencePeople是string类型,而不是mongoseObjectId的类型。
我不想更改我的模式。是否有任何方法可以在填充前检查referencePeople是否为空。或者如果为空,则避免填充。
架构:
var OrderSchema = new mongoose.Schema({
customer: {type: mongoose.Schema.Types.ObjectId,ref: 'Customer'},
referencePeople: String, // can be "" or "customer id"
......
});
尝试了以下代码,但出现异常对于路径"_id"处的值",强制转换到ObjectId失败
exports.getOrders = function(req, res) {
Order.find({})
.populate('customer')
.populate({path: 'referencePeople', model: 'customer'})
.exec(function(error, orders) {
if(error) {
return res.status(400).send({msg: 'Error occurred while getting orders.', error: error});
}
return res.status(200).send(orders);
});
};
现在,如果不是空字符串,我想填充referencePeople。在填充referencePeople是否为空之前,我可以进行检查吗?
是的,您需要使用人口查询的match子句
所以,你的代码应该是这样的:
exports.getOrders = function(req, res) {
Order.find({})
.populate('customer')
.populate({
'path': 'referencePeople',
'match': { 'referencePeople': {'$ne': ''} }
})
.exec(function(error, orders) {
if(error) {
return res.status(400).send({msg: 'Error occurred while getting orders.', error: error});
}
return res.status(200).send(orders);
});
};
Mongoose还不能处理多级填充,填充的字段不是Documents。嵌套模式是有帮助的,但它是不完全解。相应地设计您的模式
您正试图使用2nd填充调用中的现有ObjectID引用"referencePeople"对象
试试这个
exports.getOrders = function(req, res) {
Order.find({})
.populate('customer')
.exec(function(error, orders) {
if(error) {
return res.status(400).send({msg: 'Error occurred while getting orders.', error: error});
}
//Try changing the referencePeople here
return res.status(200).send(orders);
});
};
参考:MongoDB
相关文章:
- 正在对已提取的文档进行填充.有可能吗?如果有,怎么做
- 组合2个数组,如果它们不重复,则用0填充
- 如果在 HTML/JavaScript 中选中了复选框,则填充单选按钮
- 谷歌地图API没有;t显示地图,如果中心由javascript函数填充
- Javascript:如果数组元素已填充,则为数组的每个元素插入表行
- 如果选择'其他'然后填充输入字段
- 如果使用jquery输入一个字段,则自动填充其他字段
- 如果值是自动填充的,如何从下拉列表中消除该值
- 如果其他输入已填充,如何动态添加新输入 角度
- AngularJS:如果ng模型被另一个模型填充,如何让它受到影响
- 如果ID丢失,请使用jquery填充另一个隐藏字段中的行
- 如何使我的选项成为默认选项,以便如果我清除下拉列表,它将由默认选项填充
- 检查所有输入文本是否为空,如果至少有一个已填充,则打开颜色框
- 如果字段由浏览器自动填充,则触发jquery表单验证
- 如果输入已填充,请在另一个输入上写入值
- 如何填充如果字段不是空字符串如果为空则不需要填充
- 用户使用javascript生成的输入字段,如果验证失败,我如何将他们的数据填充回输入字段
- jquery脚本来填充选择列表/下拉列表(如果是星期六、星期一或星期三)
- 如果填充了三个输入并且两个特定的输入相等,则会更改按钮样式;除非不删除“不等于”输入的值,否则它可以工作
- PHP和如果填充了其他字段,则隐藏元素