gpt4 book ai didi

node.js - 如何从 MongoDB 2.4 数组内的文档中删除属性

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:58 25 4
gpt4 key购买 nike

将 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")
},
{
"discipline" : "55aae5b7848b9c8bf4ecbb5c",
"grade" : "55aae5b7848b9c8bf4ecbb4d",
"gym" : "562e7c1ae6c3e8ce29abfe05",
"registeredOn" : ISODate("2015-10-26T19:17:08.603Z"),
"_id" : ObjectId("562e7c34e6c3e8ce29abfe07")
}
],
},
{
"_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")
},
{
"discipline" : "55aae5b7848b9c8bf4ecbb5c",
"grade" : "55aae5b7848b9c8bf4ecbb4d",
"registeredOn" : ISODate("2015-10-26T19:17:08.603Z"),
"_id" : ObjectId("562e7c34e6c3e8ce29abfe07")
}
],
},
{
"_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")
}
],
}

下面的查询将仅删除第一个具有我指定的 id 的匹配文档。然而,带有 "_id": ObjectId("562e7c34e6c3e8ce29abfe07") 的第二个文档仍将具有gym属性562e7c1ae6c3e8ce29abfe05multi 似乎多余,那么有什么方法可以删除我指定的 id 的所有健身房属性吗?

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

}
}, {
multi: true
})

最佳答案

最好使用 .find() 要返回光标,请使用 .each() 对其进行迭代 方法访问集合中符合条件的每个文档,从而获取数组字段,删除符合条件的属性并更新文档,如下所示:

collection.find({ "grades.gym": "562e7c1ae6c3e8ce29abfe05" }).each(function(err, doc){
// handle err
var new_grades = doc.grades.map(function (grade){
if (grade.gym == "562e7c1ae6c3e8ce29abfe05") { delete grade.gym; }
return grade;
});

collection.update({ "_id": doc._id },{ "$set": { "grades": new_grades }});
});

关于node.js - 如何从 MongoDB 2.4 数组内的文档中删除属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33400518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com