1

私はトランザクションを処理する必要がある 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 に存在しない値を入力する意味は何ですか? それはそれについて素晴らしいことになっていることの1つではありませんか?そして、私の考えでは、将来実行できる可能性のあるクエリが削除されます。

このようなことをもっと行うことは可能でしょうか?

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

2 に答える 2

1

これはまったく問題のない動作です。存在しないフィールドは等しくないことと同じであるため、すべてのドキュメントに存在しないフィールドをクエリすることもできます。

これは、ドキュメントの大まかな定義が引き続き保持されることを意味します。

于 2012-12-31T00:45:02.317 に答える
0

私には問題ないように見えますが、展開方法によっては、キーとして機能するクライアントデータだけを信頼したくないでしょう。

多分:

['date', 'address', 'client_name'/*,...*/].forEach(function(key)
{
    /* ... */
    if (key in req.body) newTransaction[key] = req.body[key];
});
于 2012-12-31T06:13:30.920 に答える