当前位置:嗨网首页>书籍在线阅读

02-使用Python添加文档

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

18.1 使用Python添加文档

使用Python在集合中插入文档 在本节中,您将编写一个简单的Python应用程序,它使用Collection对象的方法insert()在示例数据库的一个集合中插入新文档。通过这个示例,您将熟悉如何使用Python来插入文档。程序清单18.1显示了这个示例的代码。 在这个示例中,函数 main 连接到MongoDB数据库,获取一个Collection对象,并调用其他的方法来插入文档。方法showNewDocs()显示新插入到集合中的文档。 方法addSelfie()新建一个表示单词selfie的文档,并使用insert()将其加入到数据库中;方法addGoogleAndTweet()创建表示单词google和tweet的新文档,并使用insert()以数组的方式将它们插入数据库。 请执行下面的步骤,创建并运行这个在示例数据库中插入新文档并显示结果的Python应用程序。 1.确保启动了MongoDB服务器。 2.确保下载并安装了Python MongoDB驱动程序,并运行了生成数据库words的脚本文件code/hour05/generate_words.js。 3.在文件夹code/hour18中新建一个文件,并将其命名为PythonDocAdd.py。 4.在这个文件中输入程序清单18.1所示的代码。这些代码使用insert()来添加新文档。 5.将这个文件存盘。 6.打开一个控制台窗口,并切换到目录code/hour18。 7.执行下面的命令来运行这个Python应用程序。程序清单18.2显示了这个应用程序的输出。 程序清单18.1 PythonDocAdd.py:在Python应用程序中将新文档插入到集合中 程序清单18.2 PythonDocAdd.py-output:在Python应用程序中将新文档插入到集合中的输出

在Python中与MongoDB数据库交互时,一项重要的任务是在集合中插入文档。要插入文档,首先要创建一个表示该文档的Dictionary对象。插入操作将Dictionary对象以BSON的方式传递给MongoDB服务器,以便能够插入到集合中。

有新文档的Dictionary版本后,就可将其存储到MongoDB数据库中,为此可对相应的Collection对象实例调用方法insert()。方法insert()的语法如下,其中参数doc可以是单个文档对象,也可以是一个文档对象数组:

insert(doc)

例如,下面的示例在集合中插入单个文档:

doc1 = {'name' : 'Fred'}
result = myColl.insert(doc1)

要在集合中插入多个文档,可在调用Collection对象的方法insert()时传入一个Dictionary对象数组,如下所示:

doc2 = {'name' : 'George'}
doc3 = {'name' : 'Ron'}
result = myColl.batchInsert([doc2, doc3])

请注意,方法insert()返回一个result对象,其中包含被插入到数据库的新文档的对象ID。

▼ Try It Yourself

python PythonDocAdd.py
01 from pymongo import MongoClient
02 def showNewDocs(collection):
03      query = {'category': 'New'}
04      cursor = collection.find(query)
05      for doc in cursor:
06           print (doc)
07 def addSelfie(collection):
08      selfie = {
09           'word' : 'selfie', 'first' : 's', 'last' : 'e',
10           'size' : 6, 'category' : 'New',
11           'stats' : {'vowels' : 3, 'consonants' : 3},
12           'letters' : ["s","e","l","f","i"],
13           'charsets' : [
14             {'type' : 'consonants', 'chars' : ["s","l","f"]},
15             {'type' : 'vowels', 'chars' : ["e","i"]}]}
16      results = collection.insert(selfie)
17      print ("\nInserting One Results:")
18      print (str(results))
19      print ("After Inserting One:")
20      showNewDocs(collection)
21 def addGoogleAndTweet(collection):
22      google = {
23           'word' : 'google', 'first' : 'g', 'last' : 'e',
24           'size' : 6, 'category' : 'New',
25           'stats' : {'vowels' : 3, 'consonants' : 3},
26           'letters' : ["g","o","l","e"],
27           'charsets' : [
28           {'type' : 'consonants', 'chars' : ["g","l"]},
29           {'type' : 'vowels', 'chars' : ["o","e"]}]}
30      tweet = {
31           'word' : 'tweet', 'first' : 't', 'last' : 't',
32           'size' : 5, 'category' : 'New',
33           'stats' : {'vowels' : 2, 'consonants' : 3},
34           'letters' : ["t","w","e"],
35           'charsets' : [
36           {'type' : 'consonants', 'chars' : ["t","w"]},
37           {'type' : 'vowels', 'chars' : ["e"]}]}
38      results = collection.insert([google, tweet])
39      print ("\nInserting Multiple Results:")
40      print (str(results))
41      print ("After Inserting Multiple:")
42      showNewDocs(collection)
43 if __name__=="__main__":
44      mongo = MongoClient('mongodb://localhost:27017/')
45      mongo.write_concern = {'w' : 1, 'j' : True}
46      db = mongo['words']
47      collection = db['word_stats']
48      print ("Before Inserting:")
49      showNewDocs(collection)
50      addSelfie(collection)
51      addGoogleAndTweet(collection)
Before Inserting:
Inserting One Results:
52e98aba251214137874bff0
After Inserting One:
{ 'category': 'New', 'word': 'selfie', 'last': 'e',
  'charsets': [{'chars': ['s', 'l', 'f'], 'type': 'consonants'},
                  {'chars': ['e', 'i'], 'type': 'vowels'}],
  'first': 's', 'letters': ['s', 'e', 'l', 'f', 'i'],
  'stats': {'consonants': 3, 'vowels': 3},
  '_id': ObjectId('52e98aba251214137874bff0'), 'size': 6}
Inserting Multiple Results:
[ObjectId('52e98aba251214137874bff1'), ObjectId('52e98aba251214137874bff2')]
After Inserting Multiple:
{ 'category': 'New', 'word': 'google', 'last': 'e',
  'charsets': [{'chars': ['g', 'l'], 'type': 'consonants'},
                  {'chars': ['o', 'e'], 'type': 'vowels'}],
  'first': 'g', 'letters': ['g', 'o', 'l', 'e'],
  'stats': {'consonants': 3, 'vowels': 3},
  '_id': ObjectId('52e98aba251214137874bff1'), 'size': 6}
{ 'category': 'New', 'word': 'tweet', 'last': 't',
  'charsets': [{'chars': ['t', 'w'], 'type': 'consonants'},
                  {'chars': ['e'], 'type': 'vowels'}],
  'first': 't', 'letters': ['t', 'w', 'e'],
  'stats': {'consonants': 3, 'vowels': 2},
  '_id': ObjectId('52e98aba251214137874bff2'), 'size': 5}
{ 'category': 'New', 'word': 'selfie', 'last': 'e',
  'charsets': [{'chars': ['s', 'l', 'f'], 'type': 'consonants'},
                  {'chars': ['e', 'i'], 'type': 'vowels'}],
  'first': 's', 'letters': ['s', 'e', 'l', 'f', 'i'],
  'stats': {'consonants': 3, 'vowels': 3},
  '_id': ObjectId('52e98aba251214137874bff0'), 'size': 6}