0

を使用してランダムな場所にフィールドを追加したい mongoDB コレクションがありますが$set、少なくとも$set. 私が間違っている場合は修正してください。コードを含めています。真ん中あたりに、私がやろうとしていることについてのコメントを含めます。

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://localhost:27017/weather', function(err, db) {

    // Also, what is the best way to handle err in this code?
    //if(err) throw err;

    var query = { };
    var sortorder = {"State":1, "Temperature":-1}

    var xx = null;

    //var cursor = db.collection('data').find();
    var cursor = db.collection('data').find().sort(sortorder);

    cursor.each(function(err, doc) {
        //if(err) throw err;

        if(doc == null) {
            return db.close();
        }


        if (xx == doc.State){


        }else{

                console.dir("New state -----------" + doc.State);
                console.dir("Tempurature -----------" + doc.Temperature);

                // !!!!!!!!!!!!!!!!!!!!!!!!!!   this is the problem area.
                //--- this is the part I am trying to figure out...
                update_routine = $set:{"month_high---test001":true};
                doc.update =  update_routine;
                //  How do I do a $set operation on a mongoDB cursor.  which I have here.
                xx = doc.State;
                // add the field
                //doc.update();

        }

        if(doc == null) {
            return db.close();
        }

    //app.error(function(err, req, res, next){
    //  console.error(err);
    //  res.send('Fail Whale, yo.');
    //});

        //console.dir(doc.State + " is a state!");
    });
});

~~

4

1 に答える 1

3

あなたのコードは少し無秩序に見えますが、できることは次のとおりです。$set の mongodb ドキュメントも参照してください: http://docs.mongodb.org/manual/reference/operator/update/set/

var cursor = db.collection('data').find().sort(sortorder);

cursor.each(function(err, doc) {
    if(err) throw err;

    if(doc == null) {
        return db.close();
    }

    // until here you code makes sense, you have a cursor, 
    // you checked for errors and have the current document

   // now you want to update a record, you can do it like this:

   var myquery = {};
   myquery['_id'] = doc['_id'];

   // you were missing the surrounding {}
   var myupdate = { $set: { field1: "whatever value", field2: 500 } }; 
   // obviously you want to replace field1 and field2 with your actual field names

   // instead of creating a new update object and using $set
   // you could also just modify the 'doc' variable and pass it again 
   // in the update function below instead of myupdate


   db.collection('data').update(myquery, myupdate, function (err, updatedDoc) {
      if (err) throw err;
      console.log("successfully updated document", updatedDoc);
    });

});
于 2013-11-04T15:14:41.533 に答える