sql >> Databasteknik >  >> NoSQL >> MongoDB

Växla booleskt värde för underdokument

Jag kan inte se resultatet som du hävdar, vilket betyder att det fungerar för mig och resten av världen. Här är den förkortade listan som ett enkelt skriptexempel:

    var async = require('async'),
        mongoose = require('mongoose'),
        Schema = mongoose.Schema;

    mongoose.connect('mongodb://localhost/test');

    var invitationSchema = new Schema({
      "ID": { "type": Schema.Types.ObjectId },
      "Accepted": Boolean
    });

    var userSchema = new Schema({
      "Invitation": [invitationSchema]
    });


    var User = mongoose.model( 'User', userSchema );

    User.find({},'Invitation',function(err,docs) {
      if (err) throw err;
      var results = [];

      async.each(docs,function(doc,callback) {
        async.each(doc.Invitation, function(invite,callback) {
          User.findOneAndUpdate(
            { "_id": doc._id, "Invitation._id": invite._id },
            { "$set": { "Invitation.$.Accepted": !invite.Accepted } },
            function(err,doc) {
              results.push(doc);
              callback(err);
            }
          );
        },callback);
      },function(err) {
        if (err) throw err;
        console.log( results.slice(-1)[0] );
        process.exit();
      });
    });

Så det "växlar" tydligt mellan båda värdena enligt önskemål och fungerar perfekt.

Det här är resultatet från mig på en gång:

{ _id: 54be2f3360c191cf9edd7236,
  Invitation:
   [ { __v: 0,
       ID: 54afaabd88694dc019d3b628,
       __t: 'USER',
       _id: 54b5022b583973580c706784,
       Accepted: true },
     { __v: 0,
       ID: 54af6ce091324fd00f97a15f,
       __t: 'USER',
       _id: 54bde39cdd55dd9016271f14,
       Accepted: true } ] }



  1. MongoDB infogar float när man försöker infoga heltal

  2. Mongodb C#-drivrutinsuppdateringen misslyckades med alla subarrayelement när arrayen är tom

  3. MongoDb Gå med i frågan med PHP

  4. Spark Mongo-kontakt, MongoShardedPartitioner fungerar inte