Tôi không thể thấy kết quả mà bạn yêu cầu, điều đó có nghĩa là kết quả đó phù hợp với tôi và phần còn lại của thế giới. Đây là danh sách tóm tắt dưới dạng một ví dụ tập lệnh duy nhất:
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();
});
});
Vì vậy, điều đó rõ ràng "chuyển đổi" cả hai giá trị theo yêu cầu và hoạt động hoàn hảo.
Đây là kết quả của tôi trong một lần chụp:
{ _id: 54be2f3360c191cf9edd7236,
Invitation:
[ { __v: 0,
ID: 54afaabd88694dc019d3b628,
__t: 'USER',
_id: 54b5022b583973580c706784,
Accepted: true },
{ __v: 0,
ID: 54af6ce091324fd00f97a15f,
__t: 'USER',
_id: 54bde39cdd55dd9016271f14,
Accepted: true } ] }