2013-01-04 134 views
1

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

我无法收集到更新,但它在控制台工作正常,如果我使用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

尝试使用'var id = ObjectId.fromString(data.id);'而不是创建一个字符串(其中'ObjectId' ='mongoose.Types.ObjectId')。 – WiredPrairie

回答

0

我想说明一切,这似乎只是没有工作,所以我改变了更新代码:

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

而现在它工作正常。谢谢大家对回答有帮助

1

让猫鼬做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' 
    }); 
}); 
0

猫鼬需要字符串ID。所以传递一个ObjectId不起作用。 尝试:

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

它是可以安全使用的toString用字符串和的ObjectId。