【问题标题】:Querying by "_id" doesn't return file in MongoDB in Python, using PyMongo使用 PyMongo 通过“_id”查询不会在 Python 中返回 MongoDB 中的文件
【发布时间】:2012-09-02 14:31:21
【问题描述】:

我在 Openshift 中使用 Python + MongoDB + PyMongo

import os
import gridfs
from django.http import HttpResponse
from pymongo.connection import Connection
from django.shortcuts import get_object_or_404, render_to_response
from django.http import HttpResponseRedirect, HttpResponse
from django.template import Context, RequestContext,loader

connection = Connection('mongodb://sbose78:XXXXXX@staff.mongohq.com:10068/BOSE')
db=connection['BOSE']
fs=gridfs.GridFS(db)

当我通过 _id 查询文件时,这就是我得到的。

>>> fs.exists({"_id":'504a36d93324f20944247af2'})
False

当我用相应的文件名查询时:

>>> fs.exists({"filename":'foo.txt'})

True

可能出了什么问题?

谢谢。

【问题讨论】:

    标签: python django mongodb pymongo gridfs


    【解决方案1】:
    fs.exists({"_id":ObjectId('504a36d93324f20944247af2')})
    

    你需要使用ObjectId

    【讨论】:

    • 我收到这个 NameError: name 'ObjectID' is not defined.
    • 它在这里为我工作。你能在这里展示你所有的代码吗?
    • 使用导入 Vivek 编辑了问题描述。
    • 我想看看你得到的对象 ID 是否正确。你能显示获取对象ID的代码吗?
    • 没有没有。让 mongo 生成 ObjectId。当您通过 gridfs 将对象放入/写入 mongo db 时,您将获得一个对象 ID。使用它。
    【解决方案2】:

    对于 导入 ObjectId

    from pymongo.objectid import ObjectId
    

    对于 2.2 及以上版本,改为导入

    from bson.objectid import ObjectId
    

    然后你可以像这样查询gridfs:

    fs.exists(ObjectId('504a36d93324f20944247af2'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      • 2015-11-08
      相关资源
      最近更新 更多