从 PyMongo 插入时,数据在 mongoDB 中不可见
Data not visible in mongoDB when inserted from PyMongo
我正在尝试从 python 向 mongodb collection 中插入数据,但数据未被记录。我是这样做的:
from pymongo import MongoClient
import time
class data2db:
def __init__(self):
pass
def enter_data(self,data):
client = MongoClient('127.0.0.1', 27017)
db = client.db
coll=db.Temperature1
post = {"auth": data ,
"Time" : time.asctime(time.localtime(time.time()))}
post_= coll.insert(post)
c=data2db()
c.enter_data("24.3")
当我尝试从另一种方法访问数据时,它 returns 为空。我是这样做的:
client = MongoClient('127.0.0.1', 27017)
db = client.db
coll=db.Temperature1
print coll.find_one({"_id" : 1})
print coll.find()
listed=str(coll.find({"_id" : 1})).split(' ')
listed=listed[len(listed)-1].split('>')[0]
listed={"_id" : "ObjectID(\""+listed+"\")"}
print coll.find_one(listed)'''
print db.command("collstats", "events")
如您所见,我已经尝试过不同的方法,但无论如何,它 returns 无效。如果我尝试访问 dbstats,像这样:
print db.command("dbstats")
我得到:
{u'extentFreeList': {u'totalSize': 0, u'num': 0}, u'storageSize': 49152, u'ok': 1.0, u'avgObjSize': 64.90566037735849, u'dataFileVersion': {u'major': 4, u'minor': 5}, u'db': u'db', u'indexes': 4, u'objects': 53, u'collections': 6, u'fileSize': 67108864, u'numExtents': 6, u'dataSize': 3440, u'indexSize': 32704, u'nsSizeMB': 16}
collection 甚至没有显示在 mongo 命令行上。迫切需要帮助。
你的代码“有效”,但我认为你可能复制粘贴了一些错误的东西。特别是,你交换了 find() 和 find_one() 的使用。
enter_data() 方法调用 insert() 时未指定 _id,因此驱动程序会为您创建一个。该 _id 最终成为类似于此的 ObjectId:
{ "_id" : ObjectId("558019749f43b8c19779c106"), "auth" : "24.3", "Time" : "Tue Jun 16 08:41:24 2015" }
您的代码稍后会调用 print coll.find_one({"_id" : 1})
,这将产生 null,因为发明的 _id 不会是 1。
find()
没有return一条记录;它 return 是一个游标。调用 print 不会打印内容。试试这个:
for r in coll.find():
print r
最后,因为 db 是 CLI 中特别方便的变量,所以我会避免命名数据库 db
。
我正在尝试从 python 向 mongodb collection 中插入数据,但数据未被记录。我是这样做的:
from pymongo import MongoClient
import time
class data2db:
def __init__(self):
pass
def enter_data(self,data):
client = MongoClient('127.0.0.1', 27017)
db = client.db
coll=db.Temperature1
post = {"auth": data ,
"Time" : time.asctime(time.localtime(time.time()))}
post_= coll.insert(post)
c=data2db()
c.enter_data("24.3")
当我尝试从另一种方法访问数据时,它 returns 为空。我是这样做的:
client = MongoClient('127.0.0.1', 27017)
db = client.db
coll=db.Temperature1
print coll.find_one({"_id" : 1})
print coll.find()
listed=str(coll.find({"_id" : 1})).split(' ')
listed=listed[len(listed)-1].split('>')[0]
listed={"_id" : "ObjectID(\""+listed+"\")"}
print coll.find_one(listed)'''
print db.command("collstats", "events")
如您所见,我已经尝试过不同的方法,但无论如何,它 returns 无效。如果我尝试访问 dbstats,像这样:
print db.command("dbstats")
我得到:
{u'extentFreeList': {u'totalSize': 0, u'num': 0}, u'storageSize': 49152, u'ok': 1.0, u'avgObjSize': 64.90566037735849, u'dataFileVersion': {u'major': 4, u'minor': 5}, u'db': u'db', u'indexes': 4, u'objects': 53, u'collections': 6, u'fileSize': 67108864, u'numExtents': 6, u'dataSize': 3440, u'indexSize': 32704, u'nsSizeMB': 16}
collection 甚至没有显示在 mongo 命令行上。迫切需要帮助。
你的代码“有效”,但我认为你可能复制粘贴了一些错误的东西。特别是,你交换了 find() 和 find_one() 的使用。
enter_data() 方法调用 insert() 时未指定 _id,因此驱动程序会为您创建一个。该 _id 最终成为类似于此的 ObjectId:
{ "_id" : ObjectId("558019749f43b8c19779c106"), "auth" : "24.3", "Time" : "Tue Jun 16 08:41:24 2015" }
您的代码稍后会调用 print coll.find_one({"_id" : 1})
,这将产生 null,因为发明的 _id 不会是 1。
find()
没有return一条记录;它 return 是一个游标。调用 print 不会打印内容。试试这个:
for r in coll.find():
print r
最后,因为 db 是 CLI 中特别方便的变量,所以我会避免命名数据库 db
。