如何删除ID不包含集合名称的文档?

时间:2019-07-16 07:43:06

标签: node.js mongodb mongoose

我有一个具有嵌套字段的模型,如下所示:

 static getSchema (){
        return {
            document_template: {
                type: Mongoose.Schema.Types.ObjectId,
                ref: TEMPLATE_MODEL_NAME
            },

            department: {
                type: Mongoose.Schema.Types.ObjectId,
                ref: DEPARTMENT_MODEL_NAME
            },

            fields: {
                type: [ new Mongoose.Schema({
                    key: {
                        type: String,
                        required: true,
                        trim: true
                    },
                    value: {
                        type: Object,
                        required: true,
                    }
                }) ],
                required: false
            }
        };
    } /* getSchema() */

如您所见,“字段”字段包含一个对象数组。因为我为数组中的对象定义了新的架构,所以该数组中的每个对象都有一个“ _id”字段。但是数据库中没有这些对象的集合名称。如何删除这些没有任何集合名称但具有_id的文档?

以下是文档的示例:

{
                "id": "5d232d9ed64d4ea7bdd1cac5",
                "template_id": "5d1df82b9bbf985a5aaac50e",
                "department": "5d1dc4d9c7c4504fef430eec",
                "fields": [
                    {
                        "id": "5d29967eb60ca9f88d97451b",
                        "key": "field 3",
                        "value": "333"
                    },
                    {
                        "id": "5d29967eb60ca9f88d97451a",
                        "key": "field 2",
                        "value": "asde"
                    }
                ]
}

我只想使用它们的ID来删除字段数组中的对象。我该怎么办?

2 个答案:

答案 0 :(得分:0)

您可以在mongodb中使用$pull来完成此操作。

示例:

YourModel.updateMany({}, {$pull: {fields: {id: your_id}}})

或者如果要删除ID数组:

YourModel.updateMany({}, {$pull: {fields: {id: {$in: your_array_id}}}})

答案 1 :(得分:0)

访问“字段”数组,并使用uint32_t calculatedCrc = 0; expectedCrc = *(@far uint32_t*)0x27FF0; 函数获取“ id”数组。获得ID数组后,使用.map()获取传递参数(id)的索引。如果id存在,请使用.indexOf(),然后保存模型。

.splice()