【发布时间】:2014-10-11 17:58:42
【问题描述】:
我有一个包含子文档数组的文档。
这些是文档和子文档的样子:
class Activity_Comment(EmbeddedDocument):
author_name = StringField()
text_excerpt = StringField()
url = StringField()
class Author_Activity(Document):
author_id = StringField(required=True,primary_key=True)
author_name = StringField()
author_bio = StringField()
latest_comments = ListField(EmbeddedDocumentField(Activity_Comment))
可能有多个服务器进程可以同时修改文档。
所以我想将update_one 方法与upsert=True 一起使用。
我还想将数组中的子文档数限制为 5。 根据这些链接,这似乎在 MongoDB 中是可能的:
http://docs.mongodb.org/manual/tutorial/limit-number-of-elements-in-updated-array/ http://docs.mongodb.org/manual/reference/operator/update/slice/
这些链接建议我应该使用$push 将子文档插入到数组中,并使用$slice 将数组长度限制为所需的值。
但是,我无法弄清楚如何使用 MongoEngine 来做到这一点。我尝试了以下代码
Author_Activity.objects(author_id="1").update_one(push__latest_comments=activity_comment,slice__latest_comments=5, upsert=True)
但它引发了以下异常:
Traceback(最近一次调用最后一次):文件“”,第 1 行,in 文件 "/newsoftheworld/local/lib/python2.7/site-packages/mongoengine/queryset/base.py", 第 467 行,在 update_one upsert=upsert, multi=False, write_concern=write_concern, **update) 文件 "/newsoftheworld/local/lib/python2.7/site-packages/mongoengine/queryset/base.py", 第 430 行,更新中 update = transform.update(queryset._document, **update) 文件 "/newsoftheworld/local/lib/python2.7/site-packages/mongoengine/queryset/transform.py", 第 181 行,更新中 raise InvalidQueryError(e) InvalidQueryError: Cannot resolve field "slice"
【问题讨论】:
标签: python mongodb mongoengine