标签: pymongo

省略数组mongo查询中的某些字段

类似于使用 Mongo 查询数组中对象的字段?提问者想要查询一个对象中的特定字段,但我想要的与他相反。

我的数据

{   "_id": "ffb76dea811a6773c9481fd35262fe7f", 
    "fieldA" : "A", 
    "fieldB" : "B", 
    "fieldC" : [ 
        { "group1" : "100", "group2" : "200", "id" : "b0a05edd3cb0d35674174f34da1b3021"}, 
        { "group1" : "110", "group2" : "230", "id" : "b9071b34c21f948e69cb39df7dbf10a7"} 
    ]
}
Run Code Online (Sandbox Code Playgroud)

如何查询获取

{
    "fieldA" : "A", 
    "fieldC" : [ 
        { "group1" : "100", "group2" : "200" }, 
        { "group1" : "110", "group2" : "230" } 
    ]
}
Run Code Online (Sandbox Code Playgroud)

关键是我不想id出现在我的查询结果中

db.test.insertOne({"_id":"ffb76dea811a6773c9481fd35262fe7f","fieldA":"A","fieldB":"B","fieldC":[{"group1":"100","group2":"200","id":"b0a05edd3cb0d35674174f34da1b3021"},{"group1":"110","group2":"230","id":"b9071b34c21f948e69cb39df7dbf10a7"}]})
Run Code Online (Sandbox Code Playgroud)

mongodb pymongo

1
推荐指数
1
解决办法
3685
查看次数

MongoDB - 向用户添加数据库和集合级别角色

我花了几个小时才开始研究 MongoDB。我无法弄清楚特定的角色/权限集(也需要知道差异)

这是我的问题:

给定一个数据库db_xyz

用户ABCD可以;

  1. 创建一个或多个集合
  2. 读/写/更新/删除/查找仅访问由以下人员创建的集合ABCD
  3. 可以删除创建的集合ABCD
  4. 无法以任何方式访问 db_xyz 中的其他集合或执行任何其他操作。

我将通过 Mongo 提示并使用 pymongo 混合这些操作。

python mongodb pymongo

1
推荐指数
1
解决办法
1465
查看次数

在我的 MongoDB 数据库中存储 PDF 文件并出现 PYmongo 错误

我想使用 PYMonbgo 和 gridfs 将 PDF 文件存储在我的 MongoDB 数据库(在 Ubuntu 中)中。但我收到错误“utf-8”编解码器无法解码位置 10 中的字节 0xe2:无效的连续字节

如何在 MongoDB 中使用 python 存储和接收 PDF?

from pymongo import MongoClient
import gridfs

db = MongoClient('mongodb://localhost:27017/').myDB
fs = gridfs.GridFS( db )
fileID = fs.put( open(('Test.pdf')  ))
out = fs.get(fileID)
Run Code Online (Sandbox Code Playgroud)

python mongodb pymongo gridfs

1
推荐指数
1
解决办法
2825
查看次数

Pymongo 连接到 DocumentDB 集群

为了以编程方式将 python 连接到本地环境中的 AWS DocumentDB(AWS 版本的 MongoDB)实例,我遇到了一些问题。我们尝试了以下步骤:

  1. 为了开始我们的实验,我们使用推荐的 AWS 教程来创建 python 连接: https: //docs.aws.amazon.com/documentdb/latest/developerguide/connect_programmatically.html

  2. 由于我们希望最初在本地进行设置,因此我们使用以下命令与集群建立 SSH 连接: ssh -i "example.pem" -L 27019:docdb.cluster-XXXXXXX.region.docdb.amazonaws.com:27017 ec2 -user@ec2-XXX-XXX-XXX-XXX.region.compute.amazonaws.com -N -v 此命令运行良好,我们能够创建隧道并将本地端口 27019 连接到我们的集群。与此相关的一个重要注意事项是,为了到达集群,我们必须激活 VPN 网络。

  3. 我们调整了代码以连接到本地端口:

    from pymongo import MongoClient,ReadPreference
    import urllib
    import ssl
    
    username=urllib.parse.quote_plus("username")
    password=urllib.parse.quote_plus("password")
    port=27019
    host="localhost"
    dbName="general"
    
    
    dbUri = f'mongodb://{username}:{password}@{host}:{port}/?tls=true&tlsCAFile=./rds-combined-ca-bundle.pem&retryWrites=false'
    print(dbUri)
    
    client = MongoClient(dbUri)
    print(client.list_database_names())
Run Code Online (Sandbox Code Playgroud)

运行上面的例子我们得到错误:

pymongo.errors.ServerSelectionTimeoutError: hostname '127.0.0.1' doesn't match either of 'docdb.XXXXXXX.region.docdb.amazonaws.com', 'docdb.cluster-XXXXXXX.region.docdb.amazonaws.com', 'docdb.cluster-ro-XXXXXXX.region.docdb.amazonaws.com', Timeout: 30s, Topology Description: <TopologyDescription id: 61e7f8c811a815088e97e5a7, topology_type: Unknown, servers: [<ServerDescription ('127.0.0.1', 27019) server_type: Unknown, …
Run Code Online (Sandbox Code Playgroud)

python mongodb amazon-web-services pymongo aws-documentdb

1
推荐指数
1
解决办法
5727
查看次数

mongodb中的$ all参数不适用于ObjectId列表

我检索ObjectId列表,我想使用参数$ all检索我的mongo数据库中的所有对象

我正在使用pymongo,我的请求看起来像这样:

db.database.collection.find({ "_id" : { "$all" : [ObjectId('4ee371837c93dd33dc000003'),ObjectId('4eef9f647c93dd1a90000000')] } })
Run Code Online (Sandbox Code Playgroud)

但是请求返回的游标数是0但是当我执行此请求时:

db.database.collection.find_one({ "_id" : ObjectId('4ee371837c93dd33dc000003')})
Run Code Online (Sandbox Code Playgroud)

它回报了我的好对象

任何人都知道它为什么不起作用?

mongodb pymongo object-identity

0
推荐指数
1
解决办法
1335
查看次数

pymongo在连接字符串中指定变量

我正在使用pymongo连接到我的mongodb数据库.我试图在连接字符串中调用数据库名称和集合名称,但我无法弄明白.

如果我有一个数据库名称(mydb)和一个名为(mycol)的集合,这个例子有效:

con = Connection('mymongodbhost')
d = con.mydb.mycol.find_one()
print (d)
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我可以说我将mydb和mycol定义为变量,如何在连接字符串中调用它们.所以我要说:

db = parser.get('some_conf_file', 'db_name')
col = parser.get('some_conf_file', 'col_name')
Run Code Online (Sandbox Code Playgroud)

如何在连接字符串中指定db和col变量(只是代码snippit工作)?我尝试了各种各样的组合,这肯定不起作用:

d = con.db.col.find_one()
print (d)
Run Code Online (Sandbox Code Playgroud)

这基本上是调用db(db)和集合(col).但我想在上面的例子中用db和col替换变量值.

谢谢.

python mongodb pymongo

0
推荐指数
1
解决办法
1916
查看次数

Tornado python - 如何使用pymongo将查询排序到mongoDB?

想要对一个简单的查询进行排序,但不确定它如何与"gen.task"一起使用,因为它将arg1和param的方法作为arg2.

这不仅仅是很好的:

response, error = yield gen.Task(db.client().collection.find, {"user_id":user_id})
if response:
    #blablabla
Run Code Online (Sandbox Code Playgroud)

但那我怎么给它sort()?

更新:现在抛出'回调必须可调用'错误.这似乎是Tornado现在的另一个问题.

def findsort(self, find, callback):
    return callback(db.client().collection.find(find).sort({"myfield":1}))

@gen.engine
def anotherfunction(self):
    response, error = yield gen.Task(self.findsort, {"user_id":user_id})
Run Code Online (Sandbox Code Playgroud)

python sorting tornado mongodb pymongo

0
推荐指数
1
解决办法
1321
查看次数

MongoDB - 打印

我有兴趣打印一系列查询.我有以下代码.

start = datetime.datetime(2012, 2, 2, 6, 35, 6, 764) 

end = datetime.datetime(2012, 2, 2, 6, 55, 3, 381) 

for doc in db.model.find({'time': {'$gte': start, '$lt': end}}): 
    print doc 
Run Code Online (Sandbox Code Playgroud)

它完成了工作,基本上打印了我如何插入数据.

我的问题是:

是否可以打印出整个查询的一个元素?比如,我希望它只打印项目或日期或插入的其他输入,而不是给我{'time':datetime.datime(....),'input1':...,'item':. ..}.否则,如果我必须重新解析已经解析为mongodb的mongodb查询数据,那么它将大大减慢我的程序.

谢谢.

python mongodb pymongo

0
推荐指数
1
解决办法
1万
查看次数

摆脱mongodb集合中的_id

我知道不可能删除_idmongodb集合中的字段.但是,我的集合的大小很大,该_id字段上的索引阻止我加载RAM中的其他索引.我的机器有125GB的RAM,我的收集统计数据如下:

 db.call_records.stats()
{
    "ns" : "stc_cdrs.call_records",
    "count" : 1825338618,
    "size" : 438081268320,
    "avgObjSize" : 240,
    "storageSize" : 468641284752,
    "numExtents" : 239,
    "nindexes" : 3,
    "lastExtentSize" : 2146426864,
    "paddingFactor" : 1,
    "systemFlags" : 0,
    "userFlags" : 1,
    "totalIndexSize" : 165290709024,
    "indexSizes" : {
        "_id_" : 73450862016,
        "caller_id_1" : 45919923504,
        "receiver_id_1" : 45919923504
    },
    "ok" : 1
}
Run Code Online (Sandbox Code Playgroud)

当我执行如下查询时:

db.call_records.find({ "$or" : [ { "caller_id": 125091840205 }, { "receiver_id" : 125091840205 } ] }).explain()
{
    "clauses" : [ …
Run Code Online (Sandbox Code Playgroud)

mongodb pymongo mongodb-query

0
推荐指数
1
解决办法
543
查看次数

如何共享MongoDB创建的数据库?

我们当前的Python管道从Web上擦除并将这些数据存储到MongoDB中.之后,我们将数据加载到分析算法中.这在本地计算机上运行良好,因为mongod找到数据库,但我想在Google Drive等共享平台上上传数据库,以便其他用户可以使用数据而无需再次运行刮刀.

我知道MongoDB默认将数据存储在/ data/db,所以我可以将整个/ data/db上传到Google Drive吗?

另一种选择似乎是将MongoDB导出为JSON或CSV,但我们当前的分析算法实现已经直接从MongoDB加载.

python database mongodb pymongo

0
推荐指数
1
解决办法
2708
查看次数