javascript - 如何使用 MongoDB 从嵌入数组的文档中删除属性?

标签 javascript node.js mongodb

将 native Nodejs 驱动程序与 MongoDB 2.4 结合使用,并尝试从数组中嵌入的文档中删除属性。例如。如何从 grades 数组中嵌入的文档中删除 gym 属性,其中 gym562e7c1ae6c3e8ce29abfe05?所以由此而来:

{
    "_id" : ObjectId("562abaaffb5870b8fb9dca3f"),
    "grades" : [
        {
            "_id" : ObjectId("562e7bbe70ee82bb290192bd"),
            "discipline" : "55aae5b7848b9c8bf4ecbb5c",
            "grade" : "55aae5b7848b9c8bf4ecbb4c",
            "gym" : "562e7c1ae6c3e8ce29abfe06",
            "registeredOn" : ISODate("2015-10-26T19:15:10.565Z")
        },
        {
            "discipline" : "55aae5b7848b9c8bf4ecbb5c",
            "grade" : "55aae5b7848b9c8bf4ecbb4d",
            "gym" : "562e7c1ae6c3e8ce29abfe05",
            "registeredOn" : ISODate("2015-10-26T19:17:08.603Z"),
            "_id" : ObjectId("562e7c34e6c3e8ce29abfe06")
        }
    ],
},
{
    "_id" : ObjectId("562abaaffb5870b8fb9dca3f"),
    "grades" : [
        {
            "_id" : ObjectId("562e7bbe70ee82bb290192bd"),
            "discipline" : "55aae5b7848b9c8bf4ecbb5c",
            "grade" : "55aae5b7848b9c8bf4ecbb4c",
            "gym" : "562e7c1ae6c3e8ce29abfe07",
            "registeredOn" : ISODate("2015-10-26T19:15:10.565Z")
        },
        {
            "discipline" : "55aae5b7848b9c8bf4ecbb5c",
            "grade" : "55aae5b7848b9c8bf4ecbb4d",
            "gym" : "562e7c1ae6c3e8ce29abfe05",
            "registeredOn" : ISODate("2015-10-26T19:17:08.603Z"),
            "_id" : ObjectId("562e7c34e6c3e8ce29abfe06")
        }
    ],
}

我需要这个:

{
    "_id" : ObjectId("562abaaffb5870b8fb9dca3f"),
    "grades" : [
        {
            "_id" : ObjectId("562e7bbe70ee82bb290192bd"),
            "discipline" : "55aae5b7848b9c8bf4ecbb5c",
            "grade" : "55aae5b7848b9c8bf4ecbb4c",
            "gym" : "562e7c1ae6c3e8ce29abfe06",
            "registeredOn" : ISODate("2015-10-26T19:15:10.565Z")
        },
        {
            "discipline" : "55aae5b7848b9c8bf4ecbb5c",
            "grade" : "55aae5b7848b9c8bf4ecbb4d",
            "registeredOn" : ISODate("2015-10-26T19:17:08.603Z"),
            "_id" : ObjectId("562e7c34e6c3e8ce29abfe06")
        }
    ],
},
{
    "_id" : ObjectId("562abaaffb5870b8fb9dca3f"),
    "grades" : [
        {
            "_id" : ObjectId("562e7bbe70ee82bb290192bd"),
            "discipline" : "55aae5b7848b9c8bf4ecbb5c",
            "grade" : "55aae5b7848b9c8bf4ecbb4c",
            "gym" : "562e7c1ae6c3e8ce29abfe07",
            "registeredOn" : ISODate("2015-10-26T19:15:10.565Z")
        },
        {
            "discipline" : "55aae5b7848b9c8bf4ecbb5c",
            "grade" : "55aae5b7848b9c8bf4ecbb4d",
            "registeredOn" : ISODate("2015-10-26T19:17:08.603Z"),
            "_id" : ObjectId("562e7c34e6c3e8ce29abfe06")
        }
    ],
}

似乎没有任何效果,而且最接近我需要的是:

collections.users.update({
    "grades.gym": {
        $exists: true
    }
}, {
    $unset: {
        "grades.$.gym": "562e7c1ae6c3e8ce29abfe05"

    }
}, {
    multi: true
})

最佳答案

只需指向嵌入文档字段作为更新查询:

db.users.update(
    {
        "grades.gym": "562e7c1ae6c3e8ce29abfe05"
    }, 
    {
        "$unset": {
            "grades.$.gym": "562e7c1ae6c3e8ce29abfe05"
        }
    }, { "multi": true }
)

关于javascript - 如何使用 MongoDB 从嵌入数组的文档中删除属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33354195/

相关文章:

javascript - 添加双击以 Draggable/droppable::javascript

javascript - "JavaScript objects can be indexed by strings"是什么意思?

javascript - 如何选择复选框 .length 并将其输出到 html 元素中?

jquery - 如何在Python Flask框架中将格式化数据渲染为html?

mongodb - 在不使用展开的情况下匹配数组中的两个相等字段

java - 我的 MongoDB DAO 是否应该请求唯一的数据库对象?

javascript - 有没有办法使用pdf.js为pdf渲染编写javascript事件

sql - 如何将图像 URL 插入数据库中的表中?

javascript - node.js 本地模块 :cannot find module error

node.js - Heroku 缺少模块