sql >> Database >  >> NoSQL >> MongoDB

Mongoose Unieke waarden in geneste reeks objecten

Een unieke index op een arrayveld zorgt ervoor dat dezelfde waarde niet kan voorkomen in de arrays van meer dan één document in de verzameling, maar voorkomt niet dat dezelfde waarde meer dan één keer voorkomt in de array van een enkel document. U moet dus zorgen voor uniciteit als u in plaats daarvan elementen aan de array toevoegt.

Gebruik de $addToSet operator om alleen een waarde aan een array toe te voegen als de waarde nog niet aanwezig is.

Group.updateOne({name: 'admin'}, {$addToSet: {users: userOid}}, ...

Als de users array bevat objecten met meerdere eigenschappen en u wilt ervoor zorgen dat slechts één ervan uniek is (uid in dit geval), dan moet u een andere aanpak kiezen:

var user = { uid: userOid, ... };
Group.updateOne(
    {name: 'admin', 'users.uid': {$ne: user.uid}}, 
    {$push: {users: user}},
    function(err, numAffected) { ... });

Wat dat doet, is de $push . kwalificeren update vindt alleen plaats als user.uid bestaat nog niet in de uid veld van een van de elementen van users . Dus het bootst $addToSet na gedrag, maar voor slechts uid .



  1. Redis + ActionController::Live threads sterven niet af

  2. Redis:mogelijk om een ​​element in een array of gesorteerde set te laten verlopen?

  3. Redis INCRBY met limieten

  4. spring-server kan geen verbinding maken met redis met behulp van jedis-client