Mongoose在数组中删除(拉)一个文档,不能和ObjectID一起工作
我有以下mongoose模式:
user = { "userId" : "myId", "connections": [{ "dateConnectedUnix": 1334567891, "isActive": true }, { "dateConnectedUnix": 1334567893, "isActive": false }] }
我想删除connections
数组中的第二个项目,以获得以下内容:
user = { "userId" : "myId", "connections": [{ "dateConnectedUnix": 1334567893, "isActive": false }] }
下面的代码按预期工作:
userAccounts.update({'connections.isActive': false }, {$pull: { 'connections.isActive':false }}, function (err,val) { console.log(val) });
但是,我需要删除基于ObjectId。 以下是不行的:
userAccounts.update({'connections._id': '1234-someId-6789' }, {$pull: { 'connections._id': '1234-someId-6789' }}, function (err,val) { console.log(val) });
有什么build议么? 我一直在头撞在屏幕(又名谷歌,Stackoverflow,…)几个小时,并没有运气。
看来,上面的代码将无法正常工作。 它甚至不应该为我给的第一个例子工作。
最后,我被这个答案支持: MongoDB,从数组中删除对象
这是我的工作代码:
userAccounts.update( { userId: usr.userId }, { $pull: { connections : { _id : connId } } }, { safe: true }, function removeConnectionsCB(err, obj) { ... });
我有一个像这样的文件
我必须从地址数组中删除地址
在互联网上search很多,我发现了解决scheme
Customer.findOneAndUpdate(query, {$pull: {address: addressId}}, function(err, data){ if(err) { return res.status(500).json({'error' : 'error in deleting address'}); } res.json(data); });
要使用ObjectId更新,您应该使用ObjectId对象而不是string表示forms:
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) });
mongoose:4.11.11
以下语法适用于我:
const removeTansactionFromUser = (userId, connectionId) => { return User.findByIdAndUpdate(userId, { $pull: { "connections": connectionId} }, {'new': true} ); };
Mongoose以string格式或ObjectId格式支持id。
提示: new ObjectId(stringId)
从string切换到ObjectId