引言:

from mongoengine import *
connect('local')
class Test(Document):
name=StringField(max_length=32) t = Test(name='Tommy.Yu')

  

方法 描述
DoesNotExist None
MultipleObjectsReturned None
cascade_save

Recursively saves any references / generic references on an objects

顺藤摸瓜式的保存所有被对象引用到的数据。就是保存EmbedDocument这种数据以及外键关联的数据。对象本身不做保存。如下:

>>> t2= Test(name='Joe')
>>> t2.cascade_save()
>>> t2.reload().to_json() Traceback (most recent call last):
File "<pyshell#121>", line 1, in <module>
t2.reload().to_json()
File "build\bdist.win-amd64\egg\mongoengine\document.py", line 457, in reload
raise self.DoesNotExist("Document does not exist")
DoesNotExist: Document does not exist
clean Hook for doing document level data cleaning before validation is run. Any ValidationError raised by this method will not be associated with a particular field; it will have a special-case association with the field defined by NON_FIELD_ERRORS.
compare_indexes

Compares the indexes defined in MongoEngine with the ones existing in the database. Returns any missing/extra indexes.

对比mongoengine和数据库的索引。返回缺失/多余的索引。和ensure_index(es)配合使用。

>>> t.ensure_index('name')
u'name_1'
>>> t.compare_indexes()
{'extra': [[(u'name', 1)]], 'missing': []}
delete

Delete the :class:`~mongoengine.Document` from the database. This will only take effect if the document has been previously saved.

:param write_concern: Extra keyword arguments are passed down which will be used as options for the resultant ``getLastError`` command.

For example, ``save(..., write_concern={w: 2, fsync: True}, ...)`` will wait until at least two servers have recorded the write and will force an fsync on the primary server.

从数据库中删除mongoengine.Document实例。 之前调用了save方法才起作用。

参数:write_concern: ...

例如, save(..., write_concern={w:2, fsync:True},...) 的实际调用的时机: 至少有两个服务器执行了写操作,将会迫使主服务器执行fsync(同步)。

>>> t2.delete()
>>> t2.to_json()
'{"_id": {"$oid": "54b71f7a4878c414e814d197"}, "name": "Tommy.yu"}'
>>> t3=t2.reload() Traceback (most recent call last):
File "<pyshell#93>", line 1, in <module>
t3=t2.reload()
File "build\bdist.win-amd64\egg\mongoengine\document.py", line 465, in reload
raise self.DoesNotExist("Document does not exist")
DoesNotExist: Document does not exist
drop_collection

Drops the entire collection associated with this :class:`~mongoengine.Document` type from the database.

删除和mongoengine.Document子类关联的表(collection)。

>>> t.drop_collection()
>>> Test.objects.all()
[]
ensure_index

Ensure that the given indexes are in place. :param key_or_list: a single index key or a list of index keys (to construct a multi-field index); keys may be prefixed with a **+** or a **-** to determine the index ordering

在mongoenging中加入索引。影响的是整个类的,不是实例的。直到整个collection被删除(drop_collection被调用)都有效。

>>> t3=Test(name='John')
>>> t3.compare_indexes()
{'extra': [], 'missing': []}
>>> t3.ensure_index('name')
u'name_1'
>>> t3.compare_indexes()
{'extra': [[(u'name', 1)]], 'missing': []}
ensure_indexes

Checks the document meta data and ensures all the indexes exist.

Global defaults can be set in the meta - see :doc:`guide/defining-documents` .. note:: You can disable automatic index creation by setting `auto_create_index` to False in the documents meta data

检查document的meta信息,并且确保所有的索引都存在于(mongoengine/db?)

>>> class Test2(Document):
name=StringField(max_length=100)
url =StringField(max_length=100)
meta={'indexes':['name','url']} >>> t2=Test2(name='Tommy.Yu', url='http://www.cnblogs.com/Tommy-Yu')
>>> t2.ensure_indexes()
>>> t2.compare_indexes()
{'extra': [], 'missing': []}
>>> t2.list_indexes()
[[('name', 1)], [('url', 1)], [(u'_id', 1)]]
>>> t2.drop_collection()
>>> t2=Test2(name='Tommy.Yu', url='http://www.cnblogs.com/Tommy-Yu')
>>> t2.list_indexes()
[[('name', 1)], [('url', 1)], [(u'_id', 1)]]

实在是看不出来,看看数据库(经过测试,证实在save的时候已经创建了索引。索引对于性能的提升很夸张,看这里。):

> db.test2.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "local.test2"
},
{
"v" : 1,
"key" : {
"name" : 1
},
"name" : "name_1",
"ns" : "local.test2",
"background" : false,
"dropDups" : false
},
{
"v" : 1,
"key" : {
"url" : 1
},
"name" : "url_1",
"ns" : "local.test2",
"background" : false,
"dropDups" : false
}
]

  无法确定这个函数干嘛了。

from_json

将json数据转化为未保存的documeng对象。

>>> b= t.from_json('{"name":"joe"}')
>>> t.to_json()
'{"_id": {"$oid": "54b6353c4878c414e814d195"}, "name": "Tommy.Yu"}'
>>> b.to_json()
'{"name": "joe"}'
list_indexes

Lists all of the indexes that should be created for given collection. It includes all the indexes from super- and sub-classes.

列举出表(collection)的所有索引。包含父类和子类的!

>>> t.list_indexes()
[[(u'_id', 1)]]
my_metaclass Metaclass for top-level documents (i.e. documents that have their own collection in the database.
register_delete_rule This method registers the delete rules to apply when removing this object.
reload

从数据库重新加载所有属性

>>> a=t.reload()
>>> a is t
False
>>> a
<Test: Test object>
>>> a.to_json()
'{"_id": {"$oid": "54b6353c4878c414e814d195"}, "name": "Tommy.Yu"}'
save
>>>u.save()
<Test: Test object>

源码在这里

保存 Document到数据库. 存在则修改,否则插入。

参数
  • force_insert – 不管数据是否存在,强制插入。默认为False
  • validate – 是否验证输入数据,默认为True;
  • clean – 是否调用clean方法,需要validate参数为True。默认为True。
  • write_concern – Extra keyword arguments are passed down to save() OR insert() which will be used as options for the resultant getLastError command.

For example, save(..., write_concern={w: 2, fsync: True}, ...)

will wait until at least two servers have recorded the write and will force an fsync on the primary server.

  • cascade – 是否级联保存。可以在__meta__(class Meta)中设置这个属性,默认为None.
  • cascade_kwargs – (可选) 传递给级联保存函数(cascade_save)的字典型参数。需要 cascade参数为True,默认为None.
  • _refs – A list of processed references used in cascading saves。传递给级联保存函数的(已处理的?)引用列表。默认为None.
  • save_condition – only perform save if matching record in db satisfies condition(s) (e.g., version number)。只有条件符合时,才保存数据。默认为None.
select_related

Handles dereferencing of :class:`~bson.dbref.DBRef` objects to a maximum depth in order to cut down the number queries to mongodb. .. versionadded:: 0.5

>>> t.select_related()
<Test: Test object>
>>> t.select_related(2)
<Test: Test object>
switch_collection Temporarily switch the collection for a document instance. Only really useful for archiving off data and calling `save()`:: user = User.objects.get(id=user_id) user.switch_collection('old-users') user.save() If you need to read from another database see :class:`~mongoengine.context_managers.switch_db` :param collection_name: The database alias to use for saving the document
switch_db Temporarily switch the database for a document instance. Only really useful for archiving off data and calling `save()`:: user = User.objects.get(id=user_id) user.switch_db('archive-db') user.save() If you need to read from another database see :class:`~mongoengine.context_managers.switch_db` :param db_alias: The database alias to use for saving the document
to_dbref

Returns an instance of :class:`~bson.dbref.DBRef` useful in `__raw__` queries.

返回bson.dbref.DBRef的实例。在'__raw__'查询时比较有用(pyMongo?)

>>>t.to_dbref()
DBRef('test', ObjectId('54b6353c4878c414e814d195'))
to_json

转换成json对象

>>>t.to_json()
'{"name": "Tommy.Yu"}'
to_mongo

Return as SON data ready for use with MongoDB.

>>> t.to_mongo()
SON([('_id', ObjectId('54b6353c4878c414e814d195')), ('name', u'Tommy.Yu')])
update

Performs an update on the :class:`~mongoengine.Document` A convenience wrapper to :meth:`~mongoengine.QuerySet.update`. Raises :class:`OperationError` if called on an object that has not yet been saved.

在mongoengine.Document类上进行更新操作。方法 mongoengine.QuerySet.update的简单包装。如果对象尚未调用save方法,会触发OperationError异常。

ps:源码。加入upsert参数是删除所有字段

>>> t.to_json()
'{"_id": {"$oid": "54b71e044878c414e814d196"}, "name": "Tommy.Yu"}'
>>> t.name='Tommy'
>>> t.update(upsert=True)
1
>>> t.to_json()
'{"_id": {"$oid": "54b71e044878c414e814d196"}, "name": "Tommy"}'
>>> t2=t.reload()
>>> t2.to_json()
'{"_id": {"$oid": "54b71e044878c414e814d196"}}'
>>> t.save()
<Test: Test object>
>>> t.to_json()
'{"_id": {"$oid": "54b71e044878c414e814d196"}}'

  更新字段需要在栏位前面加入set__,如下:

>>> t.update(set__name='joe')
1
>>> t.reload()
<Test: Test object>
>>> t.to_json()
'{"_id": {"$oid": "54b6353c4878c414e814d195"}, "name": "joe"}'

  

validate Ensure that all fields' values are valid and that required fields are present.

浅析mongoEngine的document对象的更多相关文章

  1. 报表软件JS开发引用HTML DOM的location和document对象

    上一次提到,在报表软件FineReport的JavaScript开发中,可以访问并处理的HTML DOM对象有windows.location.document三种.这次就继续介绍后两种,locati ...

  2. Document对象和window对象

    window对象--- 代表浏览器中的一个打开的窗口或者框架,window对象会在<body>或者<frameset>每次出现时被自动创建,在客户端JavaScript中,Wi ...

  3. Window.document对象

    1.Window.document对象 一.找到元素: docunment.getElementById("id"):根据id找,最多找一个:     var a =docunme ...

  4. JavaScript的DOM操作。Window.document对象

    间隔执行一段代码:window.setlnteval("需要执行的代码",间隔毫秒数) 例 :      window.setlnteval("alert("你 ...

  5. HTML DOM Document 对象

    HTML DOM Document 对象 HTML DOM 节点 在 HTML DOM (Document Object Model) 中 , 每一个元素都是 节点: 文档是一个文档. 所有的HTML ...

  6. JS中document对象和window对象有什么区别

    简单来说,document是window的一个对象属性.Window 对象表示浏览器中打开的窗口.如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 windo ...

  7. 9.22 window对象、document对象

    一.window对象: 属性(值或者子对象): opener:打开当前窗口的源窗口,如果当前窗口是首次启动浏览器打开的,则opener是null,可以利用这个属性来关闭源窗口 dialogArgume ...

  8. Window.document对象 轮播练习

    Window.document对象 一.找到元素:     docunment.getElementById("id"):根据id找,最多找一个:     var a =docun ...

  9. javascript获取iframe框架中页面document对象,获取子页面里面的内容,iframe获取父页面的元素,

    javascript获取iframe框架中,加载的页面document对象 因为浏览器安全限制,对跨域访问的页面,其document对象无法读取.设置属性 function getDocument(i ...

随机推荐

  1. JAVA GUI随笔

    Java的布局管理器提供了一种层面的抽象,自动将用户界面映射到所有的窗口系统.GUI组件放置在容器中,它们的位置由容器的布局管理器来管理. 布局管理器是使用布局管理器类创建的. 注:同一个对象无论添加 ...

  2. webstorm 文件历史找回~ 恢复正确状态~

    事情的经过时这样的~  我写好的HTML 我新下载了sublime text3 用这个打开了下 结果都变乱码了~ 大概截个图 都恢复了 就不瞎搞了 webstorm有错误的记录都有真好~ 恢复的具体操 ...

  3. 使用 trash-cli 逃出 rm 命令误删除重要文件的阴影

    今天是一个难忘的日子,当时本来想清除我们公司网站cms目录下面一些cdn推送网页后残留的垃圾文件,结果在执行rm -rf conten* 时打成了rm -rf conten *结果就悲剧了.cms目录 ...

  4. servlet生命周期与工作原理

    →   Jsp的本质是Servlet,Servlet是服务器端的小程序,运行在服务器,用于处理及响应客户端的请求. Servlet和JSP的区别: servlet是特殊的Java类,必须继承HttpS ...

  5. Yii2.0 实现的短信发送

    原文地址:http://www.phpxs.com/post/4245/ yii2-smserGithub项目主页 https://github.com/daixianceng/yii2-smser ...

  6. 二叉排序树(Binary Sort Tree)

    参考文章:http://blog.csdn.net/ns_code/article/details/19823463 不过博主的使用第一种方法操作后的树已经不是二叉排序树了,值得深思!! #inclu ...

  7. redis缓存分页数据ID

    1.用户通过分类.属性进来分页时 如果没有缓存,就读数据库前10页的数据Id,转为json,根据cate_分类1+cate_分类2+cate_分类3+arr_属性1+arr_属性2+arr_属性3作为 ...

  8. iOS钥匙串

    钥匙串 苹果的"生态圈",钥匙串访问,使用 AES 256 加密算法,能够保证用户密码的安全 钥匙串访问SDK,是苹果在 iOS 7.0.3 版本以后公布的 钥匙串访问的接口是纯 ...

  9. 今天依然是 JQ点击事件之“点击淡入淡出事件”

    废话不多说,先贴代码,再解释 <script> $(document).ready(function(){ $("button").click(function(){ ...

  10. scp命令的用法详解

    这篇文章主要是参考了http://blog.csdn.net/jiangkai_nju/article/details/7338177这个博客,要看详细的内容可以参考这个博客进行学习研究,但是我觉得在 ...