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});

ソケット.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

記載されているすべてを試してみましたが、うまくいかないようだったので、更新コードを次のように変更しました。

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

そして今、それはうまくいきます。回答に協力してくれたすべての人に感謝します

于 2013-01-07T10:56:17.307 に答える
0

Mongoose は ID として String を想定しています。そのため、ObjectId を渡しても機能しません。試す:

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

String と ObjectId の両方で toString を使用しても安全です。

于 2013-01-04T13:59:52.527 に答える