gpt4 book ai didi

mongodb - 计算数组中元素的数量

转载 作者:IT王子 更新时间:2023-10-29 01:42:03 27 4
gpt4 key购买 nike

我正在创建一个应用程序,它有一个函数可以从 MongoDB 集合中文档内的数组中删除元素。

我需要一种方法来在删除操作后数组立即变空时立即取消设置数组的字段。我需要这样做,以便我可以区分具有非空数组的文档和具有空数组的文档。

例如,现在我的 section 集合看起来像:

db.section.find({})

{ "_id" : ObjectId("57a0a38ad1c6ef24376477c5"), "sectionid" : "BTE4B",
"sectionname" : "BTech 4B", "year" : 4,
"session" : 2016, "courseid" : "BTE-CS", "password" : "pm8xTE0-",
"students" : 35, "addedon" : "2016-08-02 19:13:38", "teachers" : [ ] }

{ "_id" : ObjectId("57a0a96bd1c6ef24376477cd"), "sectionid" : "BTE4D",
"sectionname" : "BTech 4D", "year" : 4, "session" : 2016, "courseid" :
"BTE-CS", "password" : "sHhKr0Ov", "students" : 41, "addedon" :
"2016-08-02 19:38:43", "teachers" : [ { "facultyid" : "CS-102",
"subjectid" : "CS-ALGO" } ] }

我在第一个文档的 teachers 数组上使用 mgo 应用了 $pull 操作,但我需要一种方法来 $unset 当它变空时。

目前,我已经设法在 Go 中创建了一个解决方法,但我想在没有任何解决方法的情况下离开。

我希望我没有遗漏一些非常微不足道的东西。

谢谢!

最佳答案

建议使用 findAndModify() 执行 $pull 的 API 首先更新操作,这将返回修改后的文档,您可以访问教师数组进行检查。检查数组是否为空后,您可以发出另一个调用 $unset 的更新操作。 如果数组键有零个元素,教师字段上的运算符。

mongo shell 中的典型示例如下:

change = db.section.findAndModify({
query: { "sectionid": "BTE4D", "teachers.facultyid": "CS-102" },
update: { "$pull": { "teachers": { "facultyid" : "CS-102" } } },
new: true
});

printjson(change);

if (!change.teachers[0]) {
db.section.update(
{ "_id": change._id },
{ "$unset": { "teachers": "" } }
);
}

db.section.find({ "_id": change._id })

用 mgo 实现这个,你需要 Query.Apply 方法,它基本上包装了 findAndModify MongoDB命令

change := mgo.Change{
Update: bson.M{"$pull": bson.M{"teachers": bson.M{"facultyid": "CS-102"}}},
ReturnNew: true,
}
info, err = col.Find(M{"sectionid": "BTE4D"}).Apply(change, &doc)
fmt.Println(doc.N)

关于mongodb - 计算数组中元素的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38734485/

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