0

I want to update fields with the same ids but it is not modifying the field. I used update within the mongo shell and it is updating just one id but within my application I am getting always:

{ n: 1, nModified: 0, ok: 1 }

How can I update the field markedasread:false to markedasread:true for same ids?

setMessageAsRead:(req, res) =>{

const _self = this;
const profileId = req.body._profileId;
Messages.aggregate([
    {$match: {
      $and: [

                              {'markedasread': false},
                              {'receiver_id': ObjectId(profileId)}

                       ]
    }

 }
], function(err, unreadData){



  unreadData.forEach((dat)=>{

     Messages.update({ 'receiver_id': ObjectId(dat.receier_id) }, { $set:{'markedasread': true}}).lean().exec(function(err, data){

      console.log(data)


    });
  })


});

My Collection Messages

 [ { _id: 59aede53a468ce4b93c14e8c,
   receiver_id: 59ad9494d8fe3c3a15605655,
   created_at: 2017-09-05T17:26:43.234Z,
   message: 'ddd\n',
   sender_id: 59a1a21595788a33696d6e93,
   sender_name: 'dudu',
   markedasread: false,
   __v: 0 },
 { _id: 59aede58a468ce4b93c14e8f,
   receiver_id: 59ad9494d8fe3c3a15605655,
   created_at: 2017-09-05T17:26:48.099Z,
   message: 'ddd\n',
   sender_id: 59a1a21595788a33696d6e93,
   sender_name: 'dudu',
   markedasread: false,
   __v: 0 },
 { _id: 59aede66a468ce4b93c14e92,
   receiver_id: 59ad9494d8fe3c3a15605655,
   created_at: 2017-09-05T17:27:02.541Z,
   message: 'dudum',
   sender_id: 59a1a21595788a33696d6e93,
   sender_name: 'dudu',
   markedasread: false,
   __v: 0 },
 { _id: 59aedf36a468ce4b93c14eb1,
   receiver_id: 59ad9494d8fe3c3a15605655,
   created_at: 2017-09-05T17:30:30.417Z,
   message: 'testali\n',
   sender_id: 59a1a21595788a33696d6e93,
   sender_name: 'dudu',
   markedasread: false,
   __v: 0 },
 { _id: 59aee07ea468ce4b93c14ed3,
   receiver_id: 59ad9494d8fe3c3a15605655,
   created_at: 2017-09-05T17:35:58.712Z,
   message: 'dd\n',
   sender_id: 59a1a21595788a33696d6e93,
   sender_name: 'dudu',
   markedasread: false,
   __v: 0 },
 { _id: 59aee9fba468ce4b93c14ef3,
   receiver_id: 59ad9494d8fe3c3a15605655,
   created_at: 2017-09-05T18:16:27.709Z,
   message: 'j\n',
   sender_id: 59a1a21595788a33696d6e93,
   sender_name: 'dudu',
   markedasread: false,
   __v: 0 },
 { _id: 59aeea07a468ce4b93c14ef9,
   receiver_id: 59ad9494d8fe3c3a15605655,
   created_at: 2017-09-05T18:16:39.741Z,
   message: 'hey na\n',
   sender_id: 59a1a21595788a33696d6e93,
   sender_name: 'dudu',
   markedasread: false,
   __v: 0 },
 { _id: 59aeea15a468ce4b93c14eff,
   receiver_id: 59ad9494d8fe3c3a15605655,
   created_at: 2017-09-05T18:16:53.664Z,
   message: 'ddd\n',
   sender_id: 59a1a21595788a33696d6e93,
   sender_name: 'dudu',
   markedasread: false,
   __v: 0 },
 { _id: 59aeea8ea468ce4b93c14f05,
   receiver_id: 59ad9494d8fe3c3a15605655,
   created_at: 2017-09-05T18:18:54.562Z,
   message: 'aa\n',
   sender_id: 59a1a21595788a33696d6e93,
   sender_name: 'dudu',
   markedasread: false,
   __v: 0 },
 { _id: 59af03e6a468ce4b93c14f27,
   receiver_id: 59ad9494d8fe3c3a15605655,
   created_at: 2017-09-05T20:07:02.865Z,
   message: 'dd\n',
   sender_id: 59a1a21595788a33696d6e93,
   sender_name: 'dudu',
   markedasread: false,
   __v: 0 },
 { _id: 59b1c467dccab373056dc3af,
   receiver_id: 59ad9494d8fe3c3a15605655,
   created_at: 2017-09-07T22:12:55.908Z,
   message: 'dd\n',
   sender_id: 59ad9494d8fe3c3a15605655,
   sender_name: 'Gk',
   markedasread: false,
   __v: 0 },
 { _id: 59b30dc7ddf29f85d8f637fe,
   receiver_id: 59ad9494d8fe3c3a15605655,
   created_at: 2017-09-08T21:38:15.092Z,
   message: 'ddda\n',
   sender_id: 59299af157b81e418faf344b,
   sender_name: 'adff',
   markedasread: false,
   __v: 0 },
 { _id: 59b315347708b38677457ce2,
   receiver_id: 59ad9494d8fe3c3a15605655,
   created_at: 2017-09-08T22:09:56.284Z,
   message: 'ddd',
   sender_id: 59ad9494d8fe3c3a15605655,
   sender_name: 'Gk',
   markedasread: false,
   __v: 0 } ]
mogli mogli
  • 263
  • 1
  • 5
  • 15
  • So is `receiver_id` actually "unique"? Or are there in fact "many" documents that can actually have the same value? The response says `n: 1` which means that a document is actually matched. `nModified: 0` means that `markedasread` must already be `true` on the matched document. Ergo, there **must** be more than one document and one of them is actually `false`. You probably should be adding `"multi"` to the `.update()`. And you probably should be aware if things are multiple matches or not. – Neil Lunn Sep 10 '17 at 11:02
  • `dat.receier_id` would therefore appear to be a typo in your question given that `n: 1` says something actually matched. But it doesn't actually inspire faith, when all you really needed to do is copy and paste your "real code" into the question. So if you cannot do that, then we question what else is real. Makes it difficult for people to answer. – Neil Lunn Sep 10 '17 at 11:04
  • Ok, I have added my collection with its data. – mogli mogli Sep 10 '17 at 12:02
  • You need to add the `"multi"` option as mentioned. Or indeed use `.updateMany()`, in which the option is always applied. Also `.lean()` has no effect here. `.update()` or `.updateMany()` do not actually return documents. So there is nothing to make "lean" of. – Neil Lunn Sep 10 '17 at 12:06
  • I changed it to Messages.updateMany({ 'receiver_id': ObjectId(dat.receier_id) }, { $set:{'markedasread': true}}).exec(function(err, data){ console.log(data) }); but not working – mogli mogli Sep 10 '17 at 12:22
  • Dude you need to really read the duplicate ( and the comments I made earlier frankly ). Everything you are doing here is a waste of time. All you need is `Messages.updateMany({ receiver_id: '59ad9494d8fe3c3a15605655', markedasread: false },{ "$set": { markedasread: true } })`. That's it. No aggregate or anything else. – Neil Lunn Sep 10 '17 at 12:27

0 Answers0