Python MongoEngine是否在不同的对象上缓存相同的引用?

Python MongoEngine是否在不同的对象上缓存相同的引用?,python,mongodb,mongoengine,Python,Mongodb,Mongoengine,假设我有这个模型: class B(db.Document): pass class A(db.Document): b = db.ReferenceField(B) 我知道如果我有一个a对象,那么多次调用a.b只会查询MongoDB一次,因为MongoEngine会缓存它 但是,如果我有一个na对象列表,其中每个对象都引用相同的B对象,如果我调用a.b,这会查询MongoDB一次还是n次?基于每个文档的Mongoengine版本,因此您将查询b集合n次-给定此代码: imp

假设我有这个模型:

class B(db.Document):
    pass

class A(db.Document):
    b = db.ReferenceField(B)
我知道如果我有一个
a
对象,那么多次调用
a.b
只会查询MongoDB一次,因为MongoEngine会缓存它


但是,如果我有一个n
a
对象列表,其中每个对象都引用相同的
B
对象,如果我调用
a.b
,这会查询MongoDB一次还是n次?

基于每个文档的Mongoengine版本,因此您将查询
b
集合n次-给定此代码:

import mongoengine as mdb
class B(mdb.Document):
    pass

class A(mdb.Document):
    n = mdb.IntField()
    b = mdb.ReferenceField(B)

b = B().save()

# Save 100 A docs
for n in range(100):
    A(n=n,b=b).save()

# Make a list of the A docs
a_objects = list([A.objects(n=_).get() for _ in range(100)])


for a in a_objects:
    print (a.n, a.b)
import mongoengine as mdb
class B(mdb.Document):
    pass

class A(mdb.Document):
    n = mdb.IntField()
    b = mdb.ReferenceField(B)

b = B().save()

# Save 100 A docs
for n in range(100):
    A(n=n,b=b).save()

# Use a QuerySet on A
for a in A.objects:
    print (a.n, a.b)
如果在查看的同时运行此命令,您可以看到这将导致101次插入,然后是200次查询

这是你应该避免列出MungEngEngices文档的一个原因,请考虑这个代码:

import mongoengine as mdb
class B(mdb.Document):
    pass

class A(mdb.Document):
    n = mdb.IntField()
    b = mdb.ReferenceField(B)

b = B().save()

# Save 100 A docs
for n in range(100):
    A(n=n,b=b).save()

# Make a list of the A docs
a_objects = list([A.objects(n=_).get() for _ in range(100)])


for a in a_objects:
    print (a.n, a.b)
import mongoengine as mdb
class B(mdb.Document):
    pass

class A(mdb.Document):
    n = mdb.IntField()
    b = mdb.ReferenceField(B)

b = B().save()

# Save 100 A docs
for n in range(100):
    A(n=n,b=b).save()

# Use a QuerySet on A
for a in A.objects:
    print (a.n, a.b)
这将导致101次插入和101次查询,因为您需要的所有A文档将在一次查询中返回(前提是文档数量在默认限制内)