0

コマンドラインから次の更新コマンドを実行できます。

db.Camera.update({_id:ObjectId("51059ca49c7b280809a2a81e")}, {$set: {"Selected":0}});

ただし、NodeJSの次のコードは機能しません。item.Selectedをログに記録すると、ゼロ以外の値が取得されます。

exports.findById = function(req, res) {
    var ids = req.params.id.split(",");
    db.collection('Camera', function(err, collection) {
        for(var i = 0; i < ids.length; i++){
            collection.findOne({'_id':idArray[i]}, function(err, item) {
                item.Selected += 1;
                console.log('Selected: ' + item.Selected);
                collection.update({'_id':new BSON.ObjectID(ids[i])}, item,function(err, updated) {
                  if( err || !updated ) console.log("Not updated");
                  else console.log("Updated");
                });
            });
        }
    });

};

コンソールに、常に「更新されていません」と表示されます。

ご協力いただきありがとうございます。

4

2 に答える 2

1

変数を使用しているため、ループ内のIDは期待したものではありませんi。これらは、クロージャ内のコールバックです。したがって、戻ったとき、ループはすでに終了しています。つまり、すべての「カメラ」について、期待findOneどおりのループではありません。iids.length

コードがupdateを呼び出すときに、アイテムの_idプロパティを直接使用できます(または、必要のないクロージャーでコードをループ内でラップしない限り、ループインデックスに依存しないでください。 )。

updateこのようなもの...呼び出すクエリパラメータは変更されたものです:

{'_id':item._id)}

完全なコード:

exports.findById = function(req, res) {
    var ids = req.params.id.split(",");
    db.collection('Camera', function(err, collection) {
        for(var i = 0; i < ids.length; i++){
            collection.findOne({'_id':ids[i]}, function(err, item) {
                item.Selected += 1;
                console.log('Selected: ' + item.Selected);
                collection.update({'_id':item._id)}, item,function(err, updated) {
                  if( err || !updated ) console.log("Not updated");
                  else console.log("Updated");
                });
            });
        }
    });

};

于 2013-02-02T23:00:50.170 に答える
1

私が抱えていた問題はアイテムIDでした。メッセージをログに記録しようとすると、ID blah blaの一意性について何かを示すエラーが表示されるので、既存のアイテムのIDを保存し、更新前に削除しました。呼び出されます。同じことがmongodb開発者によって提案されました。したがって、コードは次のようになります。

id = item._id
delete item._id
collection.update(_id: id, item, function(err, updated){...}

それがお役に立てば幸いです。また、マングースの使用をお勧めします。

于 2013-02-03T19:10:39.100 に答える