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