J'ai le schéma suivant pour la mangouste:
user = {
"userId" : "myId",
"connections":
[{
"dateConnectedUnix": 1334567891,
"isActive": true
}, {
"dateConnectedUnix": 1334567893,
"isActive": false
}]
}
J'aimerais supprimer le deuxième élément du tableau connections
pour obtenir les éléments suivants:
user = {
"userId" : "myId",
"connections":
[{
"dateConnectedUnix": 1334567893,
"isActive": false
}]
}
Le code suivant fait le travail comme prévu:
userAccounts.update({'connections.isActive': false },
{$pull: { 'connections.isActive':false }},
function (err,val) {
console.log(val)
});
Mais, je dois supprimer basé sur ObjectId. Et ce qui suit ne fonctionne pas:
userAccounts.update({'connections._id': '1234-someId-6789' },
{$pull: { 'connections._id': '1234-someId-6789' }},
function (err,val) {
console.log(val)
});
Aucune suggestion? Je frappe ma tête contre l'écran (alias Google, Stackoverflow, ...) depuis des heures et je n'ai pas eu de chance.
Il semble que le code ci-dessus ne fonctionnerait pas. Cela n'aurait même pas dû fonctionner pour le premier exemple que j'ai donné.
En fin de compte, cette réponse m'a conforté dans ma réponse: MongoDB, remove object from array
Voici mon code de travail:
userAccounts.update(
{ userId: usr.userId },
{ $pull: { connections : { _id : connId } } },
{ safe: true },
function removeConnectionsCB(err, obj) {
...
});
J'ai un document comme
Je dois supprimer l'adresse du tableau d'adresses
Après avoir cherché beaucoup sur internet, j'ai trouvé la solution
Customer.findOneAndUpdate(query, {$pull: {address: addressId}}, function(err, data){
if(err) {
return res.status(500).json({'error' : 'error in deleting address'});
}
res.json(data);
});
Pour utiliser update avec ObjectId, vous devez utiliser un objet ObjectId au lieu d'une représentation sous forme de chaîne:
var ObjectId = require('mongoose').Types.ObjectId;
userAccounts.update({'connections._id': new ObjectId('1234-someId-6789') },
{$pull: { 'connections._id': new ObjectId('1234-someId-6789') }},
function (err,val) {
console.log(val)
});
mangouste: 4.11.11
Ce qui a fonctionné pour moi est la syntaxe suivante:
const removeTansactionFromUser = (userId, connectionId) => {
return User.findByIdAndUpdate(userId, { $pull: { "connections": connectionId} }, {'new': true} );
};
Mongoose support id au format chaîne ou au format ObjectId.
Astuce: new ObjectId(stringId)
pour passer de chaîne à ObjectId
user: {
_id: ObjectId('5ccf3fa47a8f8b12b0dce204'),
name: 'Test',
posts: [
ObjectId("5cd07ee05c08f51af8d23b64"),
ObjectId("5cd07ee05c08f51af8d23c52")
]
}
Supprimer un seul post du tableau posts
user.posts.pull("5cd07ee05c08f51af8d23b64"); user.save();
Vous pouvez le faire dansmongoose 5.4.x
const result = await User.findByIdAndUpdate(user_id,
{
$pull: {
connections: { _id: con_id }
}
}, { new: true });
if (result)
console.log(result)
Le tableau item
from connections
sera supprimé en fonction de la propriété fournie _id
valeur