MongoDB ListField是否维持元素顺序?使用MongoEngine v0.4.2按序写入后读取顺序是否有保障?
MongoDB ListField 元素顺序相关问题解答
咱们先直接回答第一个问题:MongoDB的ListField(准确来说是MongoDB底层的数组类型,MongoEngine的ListField只是对它的ORM封装)是会维持元素顺序的。MongoDB从设计之初就把数组作为有序集合来处理,元素的插入顺序会被持久化保存下来。
再来说第二个场景:你用MongoEngine v0.4.2做的这个写入操作,完全可以保证后续读取时列表顺序和写入一致。
看你给出的代码:
# 写入操作 obj = MyDocument.by_id(id) obj.list_field = [] obj.list_field.add("a"); obj.list_field.add("b"); obj.list_field.add("c"); obj.save()
这段代码里,你是按a→b→c的顺序依次添加元素,MongoEngine会把这个有序列表转换成MongoDB的数组类型存入数据库。而当你执行读取操作时:
# 读取操作 obj = MyDocument.by_id(id) for x in obj.list_field: print(x)
MongoDB会按存入时的顺序返回数组元素,MongoEngine的ListField也会直接映射这个顺序,所以输出肯定是:
a
b
c
需要额外说明的是,只要你没有对这个数组执行会改变顺序的操作(比如某些特定的更新操作重新排序元素),不管读多少次,顺序都和写入时完全一致。MongoEngine v0.4.2的ListField实现是完全遵循MongoDB数组的有序特性的,这点不用担心。
内容的提问来源于stack exchange,提问作者James Wierzba
相关产品推荐
相关产品推荐

