1

我正在尝试更新集合中的值。用户单击一个按钮,与该按钮对应的数字会被发送到服务器以添加到集合中。

我无法更新集合,但如果我使用它在控制台中可以正常工作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'
   });  
});
4

3 回答 3

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'
   });  
});
于 2013-01-04T13:50:41.677 回答
0

Mongoose 需要一个字符串作为 id。所以传递一个 ObjectId 是行不通的。尝试:

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

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

于 2013-01-04T13:59:52.527 回答
0

我尝试了所有说明,但似乎没有用,所以我将更新代码更改为:

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

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

于 2013-01-07T10:56:17.307 回答