2016-08-04 11 views
1

fand ich eine embedded document in meiner Sammlung Namen haben als likes:Zur Sammlung hinzufügen, wenn nicht

{ 
    "_id" : ObjectId("57a31e18fa0299542ab8dd80"), 
    "created" : ISODate("2016-08-04T10:51:04.971Z"), 
    "likes" : [ 
     { 
      "user" : ObjectId("1"), 
      "date" : 123 
     }, 
     { 
      "user" : ObjectId("2"), 
      "date" : 456 
     } 
    ], 
    "comments" : [], 
    "tag" : [] 
} 

A User kann wie nur einmal. Es darf also nur einen Eintrag pro User geben.

Das Problem ist: Es sucht nach date auch in der Objektliste, obwohl ich die user nur durchsuchen möchten und current date hinzufügen, wenn der Eintrag nicht gefunden. Denn date unterscheidet sich jedes Mal und ich bekomme doppelte Einträge für die gleichen user.

Hier ist meine mongoose query:

var likeObj = { 
    "user": "1",  //user id 
    "date": Utils.getUnixTimeStamp() //date 
}; 

post.update({_id: postId}, {$addToSet: {"likes": likeObj}} ,function(err,doc){ 
    //success 
}); 

Antwort

0

Sie den Benutzer zu der Abfrage hinzufügen:

post.update({_id: postId, 
 
       likes: {$not: {$elemMatch: {user: likeObj.user}}}}, 
 
         {$addToSet: {"likes": likeObj}} ,function(err,doc){ 
 
     
 
    });