node.js只将填充的值传递给mongodb

时间:2012-12-31 00:29:14

标签: javascript node.js mongodb database

我正在处理node.js,mongodb和express中必须处理事务的项目。 我可以将变量硬编码到mongodb中,但如果不是所有字段都被填写(并非所有字段都是必需的)那么我只是将空数据放入数据库中。

此代码有效:

    var d = new Date();
    var n = d.toJSON();

    var date               = n;
    var address            = req.body.property_address;
    var client_name        = req.body.client_name;
    var sales_price        = req.body.sales_price;
    var commission_percent = req.body.commission_percent;
    var referral           = req.body.referral;
    var donation           = req.body.donation;
    var client_source      = req.body.client_source;
    var client_type        = req.body.client_type;
    var notes              = req.body.notes;

    Transaction.findOne({ name: { $regex: new RegExp(date, "i") } },
        function(err, doc){
            if(!err && !doc) {
                console.log("there is no error, and this does not already exist");
                var newTransaction = new Transaction();

                newTransaction.date               = date;
                newTransaction.address            = address;
                newTransaction.client_name        = client_name;
                newTransaction.sales_price        = sales_price;
                newTransaction.commission_percent = commission_percent;
                newTransaction.referral           = referral;
                newTransaction.donation           = donation;
                newTransaction.client_source      = client_source;
                newTransaction.client_type        = client_type;
                newTransaction.notes              = notes;

                newTransaction.save(function(err) {
                    if(!err){
                        console.log("successfully saved");
                        res.json(200, {message: newTransaction.date});
                    } else {
                        res.json(500, {message: "Could not create transaction. Error: " + err})
                    }
                });
            }
    });

但是,将一个不存在于mongodb中的值放入是什么意义?这不应该是令人敬畏的东西之一吗?而我的想法是,它会带走我将来可能会做的查询。

是否有可能做更像这样的事情?

Transaction.findOne({ name: { $regex: new RegExp(date, 'i' ) } },
    function(err, doc){
        if(!err && !doc){
            var newTransaction = new Transaction();

            for(var key in req.body){
                newTransaction.key = req.body[key];
            }
        }
    }
});

更新

这是我最终使用的代码。

Transaction.findOne({ name: { $regex: new RegExp(date, "i") } },
    function(err, doc){
        if(!err && !doc){
            var newTransaction = new Transaction();
            for(var key in req.body){
                if(req.body[key] != ''){
                    newTransaction[key] = req.body[key];
                }
            }
        }
    }
});

2 个答案:

答案 0 :(得分:1)

这是非常好的行为。您仍然可以查询所有文档中不存在的字段,因为不存在的字段与不相等的字段相同。

这意味着文档的松散定义仍然保留。

答案 1 :(得分:0)

对我来说很好,但我可能不想仅仅依赖于任何客户端数据作为密钥,具体取决于您的部署方式。

也许:

['date', 'address', 'client_name'/*,...*/].forEach(function(key)
{
    /* ... */
    if (key in req.body) newTransaction[key] = req.body[key];
});