我有以下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)
    }
);

有什么建议吗?我一直把头撞在屏幕上(又名谷歌,Stackoverflow,…)好几个小时都没有运气.

推荐答案

上面的代码似乎不起作用.对于我给出的第一个例子,它甚至都不应该起作用.

最后,我得到了这个答案的支持:MongoDB, remove object from array

以下是我的工作代码:

userAccounts.update( 
    { userId: usr.userId },
    {
        $pull: {
            connections: { _id : connId }
        }
    },
    { safe: true },
    function removeConnectionsCB(err, obj) {
        // ...
    }
);

Mongodb相关问答推荐

在MongoDB中使用explain()和查询时缺少winningPlan''''

从MongoDB迁移到PostgreSQL:为PostgreSQL编写聚合管道查询

MongoDB shell:如何删除列表以外的所有集合

mongoDB文档数组字段中的唯一项如何

在推入 mongodb 时自动填充 golang struct 中的 created_at 和 updated_at

Mongo:投影不影响布尔值

在mongo聚合中将ObjectID转换为字符串

Mongo查找对象内最长数组的查询

如何在 MongoDB 集合中查找与给定条件匹配的文档和单个子文档

mongodb无法启动

在 URL 中使用 ID(来自 mongo 的 ObjectId)是否安全?

Node + Mongoose:获取最后插入的 ID?

MongoDB 日志(log)文件和 oplog 有何不同?

Mongoose.pre('save') 不会触发

MongoDB 在 mongoengine 中使用 OR 子句

在 mongodb 中插入当前日期时间

如何判断 MongoDB 中是否存在字段?

MongoDB备份计划

MongoDB 按数组元素对文档进行排序

如何使用户的邮箱在 mongoDB 中唯一?