如果填充if字段不为空字符串如果为空则无需填充?

时间:2015-11-23 11:40:46

标签: javascript angularjs node.js mongodb

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

我不想改变我的架构。有没有办法在填充之前检查 referencePeople 是否为空。或者如果为空则避免填充。

模式:

[Route("{action=list}")]

尝试了以下代码,但得到了异常 强制转换为ObjectId的值""在路径" _id"

var OrderSchema = new mongoose.Schema({

    customer: {type: mongoose.Schema.Types.ObjectId,ref: 'Customer'},
    referencePeople: String, // can be "" or "customer id"
   ......
});

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

2 个答案:

答案 0 :(得分:1)

是的,您需要使用population query

匹配子句

所以,你的代码应该是这样的:

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);
    });

};

答案 1 :(得分:0)

  

Mongoose还无法处理多级人口,填充的字段不是文档。嵌套模式很有用,但它是一个   不全解。相应地设计你的模式。

您正在尝试引用“参考人”'对象使用2 nd 填充调用中的现有ObjectID

试试这个

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