【问题标题】:How do I limit number of elements in updated array using $push and $slice in MongoEngine如何在 MongoEngine 中使用 $push 和 $slice 限制更新数组中的元素数量
【发布时间】: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


    【解决方案1】:

    返回新值的 findAndModify 怎么样? 如果您达到了限制 - 删除一个。

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 2020-10-28
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      • 2019-08-11
      相关资源
      最近更新 更多