Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 在MongoEngine中是否可以识别GenericReferenceField引用的对象/文档?_Django_Mongodb_Mongoengine - Fatal编程技术网

Django 在MongoEngine中是否可以识别GenericReferenceField引用的对象/文档?

Django 在MongoEngine中是否可以识别GenericReferenceField引用的对象/文档?,django,mongodb,mongoengine,Django,Mongodb,Mongoengine,我想知道这是否有可能。假设我想查看集合中的所有文档,但想筛选出那些将某个对象设置为GenericReferenceField()的文档。查找对象“类型”是Mongoengine如何序列化文档的问题。因此,您可以始终使用原始查询进行检查。考虑以下事项: > use project1 switched to db project1 > db.page.findOne() { "_id" : ObjectId("52e862b11d41c80802167cc4"), "ti

我想知道这是否有可能。假设我想查看集合中的所有文档,但想筛选出那些将某个对象设置为GenericReferenceField()的文档。

查找对象“类型”是Mongoengine如何序列化文档的问题。因此,您可以始终使用原始查询进行检查。考虑以下事项:

> use project1
switched to db project1
> db.page.findOne()
{
    "_id" : ObjectId("52e862b11d41c80802167cc4"),
    "title" : "Using MongoEngine",
    "bookmark_object" : {
            "_cls" : "Link",
            "_ref" : DBRef("link", ObjectId("52e862b11d41c80802167cc3"))
    },
    "date_modified" : ISODate("2014-01-29T13:08:49.315Z")
}
该类仅在字段中

from mongoengine import *
import datetime

connect('project1')

class Page(Document):
  title = StringField(max_length=200, required=True)
  bookmark_object = GenericReferenceField()
  date_modified = DateTimeField(default=datetime.datetime.now)

class Link(Document):
    url = StringField()

#link = Link(url='http://mongodb.com/')
#link.save()

#page = Page(title='Using MongoEngine', bookmark_object=link)
#page.save()

pages = Page.objects(__raw__={ 'bookmark_object._cls': 'Link' })

for item in pages:
    print item.bookmark_object

换句话说,bookmark_object.cls将包含文档的名称?所以在理论上你们可以做“item.bookmark\u object.cls”,那个将输出Link?实际上是“item.bookmark\u object.cls”,但是的。这取决于您的目的,即您是只想获取类名,还是想查询集合中与该类匹配的项。类似的情况也适用于列表中的对象。