类似于使用 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。我无法弄清楚特定的角色/权限集(也需要知道差异)
这是我的问题:
给定一个数据库db_xyz
用户ABCD可以;
ABCDABCD我将通过 Mongo 提示并使用 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 连接到本地环境中的 AWS DocumentDB(AWS 版本的 MongoDB)实例,我遇到了一些问题。我们尝试了以下步骤:
为了开始我们的实验,我们使用推荐的 AWS 教程来创建 python 连接: https: //docs.aws.amazon.com/documentdb/latest/developerguide/connect_programmatically.html。
由于我们希望最初在本地进行设置,因此我们使用以下命令与集群建立 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 网络。
我们调整了代码以连接到本地端口:
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) 我检索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)
它回报了我的好对象
任何人都知道它为什么不起作用?
我正在使用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替换变量值.
谢谢.
想要对一个简单的查询进行排序,但不确定它如何与"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) 我有兴趣打印一系列查询.我有以下代码.
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查询数据,那么它将大大减慢我的程序.
谢谢.
我知道不可能删除_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) 我们当前的Python管道从Web上擦除并将这些数据存储到MongoDB中.之后,我们将数据加载到分析算法中.这在本地计算机上运行良好,因为mongod找到数据库,但我想在Google Drive等共享平台上上传数据库,以便其他用户可以使用数据而无需再次运行刮刀.
我知道MongoDB默认将数据存储在/ data/db,所以我可以将整个/ data/db上传到Google Drive吗?
另一种选择似乎是将MongoDB导出为JSON或CSV,但我们当前的分析算法实现已经直接从MongoDB加载.