Possible en double:
Can mongo upsert data?Upsert un sous-document en utilisant mangouste
Je schémas définis comme suit:
var Permission = new Schema({
_id: String, // email address
role: String // "admin" or "member"
});
var Org = new Schema({
name: {type: String, index: {unique: true, dropDups: true}, trim: true},
permissions: [Permission]
});
Je suis en train de soit correspondance et mettre à jour un sous-document row (dans mon cas, 'permissions', ou insérez une nouvelle ligne permissins si aucune correspondance (par exemple upsert)
Voici ce que je l'ai écrit:
exports.updatePermissions = function(req, res) {
return Org
.update(
{name:"my_org", "permissions.$._id": req.body.email},
{$set: {"permissions.$.role": req.body.role}})
.exec(function(err) {
// stuff
});
};
MongoDB semble accepter (par exemple pas d'erreurs), mais il n'y a pas de changement dans la base de données. J'ai également essayé le suivant dans le shell mongo:
db.orgs.update({"name":"my_org", "permissions.$._id":"[email protected]"}, {$set: {"permissions.$.role": "member"}});
Encore une fois, Mongo a accepté la requête, mais pas de changement. Voici le document que j'essaie de modifier:
{
"name" : "my_org",
"permissions" : [
{
"_id" : "[email protected]",
"role" : "admin"
}
]
}
Des suggestions? Un grand merci
Merci. Cela fonctionne pour moi de mettre à jour une entrée existante, mais il n'insère pas une entrée inexistante (j'ai ajouté upsert = true également). Avez-vous des conseils sur la façon dont l'upsert fonctionnerait ici? –
Je pense que votre chance sur l'upsert. L'opérateur "$" doc met spécifiquement en garde contre son utilisation pour les opérations "upsert". – mjhm