Javascript 如果字段不是空字符串,如果为空,则如何填充?无需填充?

Javascript 如果字段不是空字符串,如果为空,则如何填充?无需填充?,javascript,angularjs,node.js,mongodb,Javascript,Angularjs,Node.js,Mongodb,我有一个应用程序,它有大量以前保存在mongoDB中的数据。现在,如果referencePeople不是空字符串,我需要填充一些信息。在我的应用程序中,referencePeople是字符串类型,而不是mongoose ObjectId类型 我不想更改我的模式。在填充之前,是否有任何方法检查referencePeople是否为空。或者如果为空,则避免填充 模式: var OrderSchema = new mongoose.Schema({ customer: {type: mongo

我有一个应用程序,它有大量以前保存在mongoDB中的数据。现在,如果referencePeople不是空字符串,我需要填充一些信息。在我的应用程序中,referencePeople是字符串类型,而不是mongoose ObjectId类型

我不想更改我的模式。在填充之前,是否有任何方法检查referencePeople是否为空。或者如果为空,则避免填充

模式:

var OrderSchema = new mongoose.Schema({

    customer: {type: mongoose.Schema.Types.ObjectId,ref: 'Customer'},
    referencePeople: String, // can be "" or "customer id"
   ......
});
尝试了下面的代码,但路径“\u id”处的值“”的异常转换为ObjectId失败

现在我想填充referencePeople,如果它不是空字符串。
我可以在填充引用之前检查people是否为空吗?

是的,您需要使用

因此,您的代码应该是smth,如下所示:

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还不能处理多级填充,填充的字段不是文档。嵌套模式是有帮助的,但它是一个 不完全解决。相应地设计您的模式

您正在尝试使用第二次填充调用中的现有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);
    });
})


参考

更新后的我的问题可能重复。我知道在尝试将空字符串转换为对象时出现强制转换错误。但我的问题是,如果它是空字符串,我如何处理它。可能不是重复的问题。Thankshi@aeryaguzov,'match':{'referencePeople':{'ne':''}}可以检查订单收款或客户收款吗?我需要办理收款手续。感谢客户的收藏。然后尝试在模式中使用适当的ref,例如{referencePeople:{type:String,ref:'Customer'}。告诉我它是否有效,我将更新我的答案。
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);
    });