我正在尝试更新集合中的值。用户单击一个按钮,与该按钮对应的数字将被发送到服务器以添加到集合中。
我无法更新集合,但如果我使用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;
客户端(按钮点击时)
// 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'
});
});
答案 0 :(得分:1)
让Mongoose将id
字符串转换为ObjectId
:
socket.on('rated', function(data) {
Order.update( {_id: data.id}, {$set: {rated: data.rated}} );
socket.emit('updated', {
note: 'Some HTML notification to append'
});
});
答案 1 :(得分:0)
Mongoose期望String为id。因此传递ObjectId不起作用。 尝试:
Order.update( {_id: id.toString()}, ....... );
使用带有String和ObjectId的toString是安全的。
答案 2 :(得分:0)
我尝试了所有陈述但它似乎没有用,所以我将更新代码更改为:
Order.findOne({_id : id}, function(err, doc) {
doc.rated = data.rated;
doc.status = data.status;
doc.save();
});
现在它工作正常。感谢所有为回答做出贡献的人