gpt4 book ai didi

arrays - 使用多个条件更新 mongodb 中嵌套数组中的对象

转载 作者:可可西里 更新时间:2023-11-01 09:14:24 25 4
gpt4 key购买 nike

mongo 中的示例文档如下所示,但我的集合有几千个文档,其中一些具有以下所有测试,而一些仅具有以下测试的子集:

{
"_id" : ObjectId("52435f0f6f73205f7d37a2b0"),
"ID" : {
"schoolID" : "1234"
},
"institution" : {
"tests" : [
{
"test" : "SAT Math",
"25th_percentile" : null,
"mean" : 404,
"50th_percentile" : null,
"75th_percentile" : null
},
{
"test" : "SAT Verbal",
"25th_percentile" : null,
"mean" : 355,
"50th_percentile" : null,
"75th_percentile" : null
},
{
"test" : "SAT Writing",
"25th_percentile" : null,
"mean" : 363,
"50th_percentile" : null,
"75th_percentile" : null
},
{
"test" : "SAT Composite",
"25th_percentile" : null,
"mean" : 1122,
"50th_percentile" : null,
"75th_percentile" : null
},
{
"test" : "ACT Math",
"25th_percentile" : null,
"mean" : null,
"50th_percentile" : null,
"75th_percentile" : null
},
{
"test" : "ACT English",
"25th_percentile" : null,
"mean" : null,
"50th_percentile" : null,
"75th_percentile" : null
},
{
"test" : "ACT Reading",
"25th_percentile" : null,
"mean" : null,
"50th_percentile" : null,
"75th_percentile" : null
},
{
"test" : "ACT Science",
"25th_percentile" : null,
"mean" : null,
"50th_percentile" : null,
"75th_percentile" : null
},
{
"test" : "ACT Composite",
"25th_percentile" : null,
"mean" : null,
"50th_percentile" : null,
"75th_percentile" : null
}
]
}
}

我目前收到了几所学校的单独数据,想更新 ID 为“schoolID”、“test”为“ACT Composite”且“mean”为空的文档。

我尝试了以下方法:

db.collection.update({$and:[{"ID.schoolID":"1234"},    {"institution.tests.$.test": "ACT Composite"}, {"institution.tests.$.mean": null}]}, {"$set":{"institution.tests.$.mean":"trial"}})

但是,对象没有更新。我也尝试过使用 $elemMatch:

db.collection.update({$and:[{"ID.schoolID":"1234"},{"institution.tests": {$elemMatch:{"test": "ACT Composite", "mean":null}}}]},{"institution.tests.$.mean":"trial"})

当使用 $elemMatch 时,我能够计算出符合此条件的文档数量:

db.collection.find({"institution.tests":{$elemMatch:{"test":"ACT Composite", "mean":null}}}).count()

最后,我还尝试使用 pymongo 编写一个 python 脚本,它将对象转换为 pandas 数据框(因为我更熟悉如何在 R 中使用数据框和“ifelse”执行此操作,但是,我是仅更新“test”为“ACT Composite”且“mean”为空的特定对象时遇到问题。

任何帮助将不胜感激!先感谢您!

最佳答案

您可以按如下方式进行:

db.collection.update(
{
"ID.schoolID": "1234",
"institution.tests": { $elemMatch: { test: "ACT Composite", mean: null } },
},
{ $set: { "institution.tests.$.mean": "trial" } }
);

关于arrays - 使用多个条件更新 mongodb 中嵌套数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20474697/

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