首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python,TypeError:文档必须是dict、bson.son.SON、bson.raw_bson的实例

Python,TypeError:文档必须是dict、bson.son.SON、bson.raw_bson的实例
EN

Stack Overflow用户
提问于 2017-11-03 14:50:33
回答 1查看 8.2K关注 0票数 2

我能够从URL中检索JSON文件,并将其赋值给一个变量以供测试,但我在将它插入MongoDB时遇到了实际困难。这是我的密码。

代码语言:javascript
复制
import urllib.request, json
from datetime import datetime
import pymongo
from pymongo import *
client = MongoClient()
db = client['2marte71']
posts = db.posts
with urllib.request.urlopen("http://southamptonstudentrooms.com/IoT/arduinoData.php") as url:
    data = json.loads(url.read().decode())
    print(data) # just to test json data
result = posts.insert_one(data).inserted_id

以及外壳输出:

[{'temp': '24', 'time': '00:35:17', 'ldr': '40', 'hum': '44'}, {'temp': '24', 'time': '00:37:21', 'ldr': '40', 'hum': '44'}, {'temp': '24', 'time': '00:39:25', 'ldr': '40', 'hum': '44'}, {'temp': '23', 'time': '00:00:13', 'ldr': '50', 'hum': '46'}, {'temp': '23', 'time': '00:02:16', 'ldr': '39', 'hum': '46'}, {'temp': '23', 'time': '00:04:20', 'ldr': '39', 'hum': '46'}, {'temp': '23', 'time': '00:06:24', 'ldr': '39', 'hum': '46'}, {'temp': '23', 'time': '00:08:28', 'ldr': '39', 'hum': '46'}, {'temp': '23', 'time': '00:10:31', 'ldr': '39', 'hum': '46'}, {'temp': '23', 'time': '00:12:35', 'ldr': '39', 'hum': '46'}, {'temp': '23', 'time': '00:14:39', 'ldr': '50', 'hum': '46'}, {'temp': '23', 'time': '00:16:43', 'ldr': '39', 'hum': '46'}, {'temp': '23', 'time': '00:18:46', 'ldr': '36', 'hum': '46'}, {'temp': '23', 'time': '00:20:50', 'ldr': '36', 'hum': '45'}, {'temp': '23', 'time': '00:22:54', 'ldr': '37', 'hum': '45'}, {'temp': '23', 'time': '00:24:58', 'ldr': '37', 'hum': '45'}, {'temp': '23', 'time': '00:27:01', 'ldr': '38', 'hum': '45'}, {'temp': '24', 'time': '00:29:05', 'ldr': '41', 'hum': '45'}, {'temp': '24', 'time': '00:31:09', 'ldr': '41', 'hum': '44'}, {'temp': '24', 'time': '00:33:13', 'ldr': '40', 'hum': '44'}]

代码语言:javascript
复制
Traceback (most recent call last):
  File "testPythonJson.py", line 11, in <module>
    result = posts.insert_one(data).inserted_id
  File "/usr/local/lib/python3.5/dist-packages/pymongo/collection.py", line 664, in insert_one
    common.validate_is_document_type("document", document)
  File "/usr/local/lib/python3.5/dist-packages/pymongo/common.py", line 409, in validate_is_document_type
    "collections.MutableMapping" % (option,))
TypeError: document must be an instance of dict, bson.son.SON, bson.raw_bson.RawBSONDocument, or a type that inherits from collections.MutableMapping
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-03 14:58:20

很简单。你想在芒果中插入一个数组。要么将数组包装在顶级字典中,以插入一个以数组作为属性的单个文档:

代码语言:javascript
复制
data = {data:data}
result = posts.insert_one(data).inserted_id 

或者使用允许同时插入多个文档的函数之一:

代码语言:javascript
复制
posts.insert_many(data)

然后,每个数组项将是一个单独的文档。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47098555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档