如何解决在 MongoEngine 中按条件更新嵌套属性
我使用以下 MongoEngine 文档描述了 MonogoDB 集合:
class Inner(EmbeddedDocument):
value = StringField()
class Outer(Document):
inner = EmbeddedDocumentListField(Inner)
所以 MongoDB 中的 db.outer
集合看起来像这样:
{ "inner": [{ "value": "A" },{ "value": "B" }] },{ "inner": [{ "value": "B" }] },{ "inner": [] }
现在,我想更新所有inner.value
,其中旧值是“B”到“C”,所以想要的结果是:
{ "inner": [{ "value": "A" },{ "value": "C" }] },{ "inner": [{ "value": "C" }] },{ "inner": [] }
在原生 MongoDB 中,我可以使用这个查询:
db.outer.updateMany(
{},{ "$set": { "inner.$[current].value": "C" }},{ "arrayFilters": [{ "current.value": "B" }]}
)
在 MongoEngine 中有没有办法做到这一点?如果不是,我可以以某种方式运行本机 updateMany
查询吗?我只知道聚合 (Outer.objects.aggregate
)。
解决方法
我发现这不是很干净(_get_collection 不应该是公开的)解决方案:
Outer._get_collection().update_many(
{},{"$set": {"inner.$[current].value": "C"}},array_filters=[{"current.value": "B"}]
)
,
一种更简洁的方法是使用 __raw__
,它允许在使用 mongoengine 表时传递任何 mongo 条件 - 请在此处查看更多信息:https://www.vogella.com/tutorials/AndroidIntent/article.html#start-sub-activity-providing-some-data
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。