node.js只传递给mongodb值

我在node.js和mongodb上开发一个项目,并表示必须处理事务。 我可以硬编码的variables要放到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]; } } } } }); 

对我来说看起来不错,但我可能不想只信任任何客户端数据作为关键,这取决于你如何部署。

也许:

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

这是完美的行为。 您仍然可以查询所有文档中不存在的字段,因为不存在的字段是不相同的。

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