【问题标题】:Data not visible in mongoDB when inserted from PyMongo从 PyMongo 插入时,数据在 mongoDB 中不可见
【发布时间】:2015-06-16 20:53:33
【问题描述】:

我正在尝试从 python 的 mongodb 集合中插入数据,但没有记录数据。我就是这样做的:

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")

当我尝试从另一个方法访问数据时,它返回 null。我是这样做的:

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")

如您所见,我已经尝试过不同的方法,但无论如何,它都会返回 null。如果我尝试访问 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}

该集合甚至没有显示在 mongo 命令行上。急需帮助。

【问题讨论】:

  • 我已经复制了你的第一个文件,并执行了它。它为我插入了数据。 (python2.7,mongo3.0.1)。在您的第一个文件中,您能否添加“print post_”并查看结果是什么?它应该返回您插入的文档的 ID。 (如果成功)
  • 我已经检查过了。它正在返回文档内容,但集合仍然丢失。我过得很糟糕 :'( 我还检查了我的 mongo 版本是否合规,但这无处可去
  • @WanBachtiar 集合 Temperature1 在您的 mongodb 中可用吗?如果是,请检查 db.Temperture1.find() 是否返回任何内容?您使用的是什么操作系统?
  • 是的,该系列可用。我可以使用 python "print list(coll.find())" 进行检查,它会将文档返回给我。我正在使用 Linux Mint。我想尝试回到基本,在 mongo shell 中插入,看看它是否在那里工作。
  • MongoShell 和 mongojava 工作得很好。我特别需要 python,因为我正在使用一个用于 ist python 的用例的 API。无论如何,问题终于解决了,但现在还有另一个问题,但是当我发布 {"Temperature" : 24.3} 并发送查询时,mongo 返回 {"_id": ObjectId("558019749f43b8c19779c106"),"Temperature" : -0.00000789320} 可以你猜是什么问题?像 12 这样的整数工作正常

标签: python mongodb pymongo


【解决方案1】:

您的代码“有效”,但我认为您可能复制粘贴了一些错误。特别是,您正在交换 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() 不返回记录;它返回一个游标。调用 print 不会打印内容。试试这个:

for r in coll.find():
    print r

最后,由于 db 是 CLI 中的特殊便利变量,我会避免将数据库命名为 db

【讨论】:

  • 感谢您的回复,但我已经尝试了所有这些,但无论如何,从 mongo 命令行中看不到该集合。 ://
  • 我试过:for r in coll.find(): print r 它正在将多个文档打印到控制台,这是所需的行为。但是,当我通过启动 mongo 进行检查时,这些相同的文档和集合 Temperature1 不可见。这是它的预期工作方式吗?
  • 启动 mongo 并执行以下操作:使用 db 然后显示集合
  • 感谢您帮助我:D
  • 很抱歉再次打扰您,但是当我发布 {"Temperature" : 24.3} 并发送查询时,mongo 返回 {"_id": ObjectId("558019749f43b8c19779c106"),"Temperature" : -0.00000789320}你能猜出问题是什么吗?像 12 这样的整数工作正常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 2021-02-01
  • 2012-09-23
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多