更新MongoDB集合 – JavaScript

我正在尝试更新集合中的值。 用户点击一个button,并将与该button对应的数字发送到服务器以添加到集合中。

我不能得到集合更新,但它在控制台中正常工作,如果我使用db.orders.update()

订单型号:

 // DB Initiation stuff var orderSchema = new mongoose.Schema({ status: String, rated: Number }); var collection = 'orders'; var Order = db.model('Order', orderSchema, collection); module.exports = Order; 

客户端(当点击button时)

 // starID = 5; id = 50e6a57808a1d92dcd000001 socket.emit('rated', {rated: starID, id: id}); 

socket.js:

 var Order = require('../models/orders'); socket.on('rated', function(data) { /* Probably a better way to do this but, wrap * the id in 'ObjectId(id)' */ var id = 'ObjectId("'+data.id+'")'; Order.update( {_id: id}, {$set: {rated: data.rated}} ); socket.emit('updated', { note: 'Some HTML notification to append' }); }); 

让Mongoose将idstring转换为ObjectId

 socket.on('rated', function(data) { Order.update( {_id: data.id}, {$set: {rated: data.rated}} ); socket.emit('updated', { note: 'Some HTML notification to append' }); }); 

Mongoose期望一个String作为id。 所以传递一个ObjectId不起作用。 尝试:

 Order.update( {_id: id.toString()}, ....... ); 

与String和ObjectId一起使用toString是安全的。

我试过所有说明,它似乎并没有工作,所以我改变了更新代码:

 Order.findOne({_id : id}, function(err, doc) { doc.rated = data.rated; doc.status = data.status; doc.save(); }); 

现在它工作正常。 感谢所有为答复做出贡献的人