我有如下的mongo文件:
{
"_id" : ObjectId("59ccb655071d4c2ceebe190c"),
"session_deatils" : [
{
"session_start" : 1,
"session_complete" : 1,
"started_at" : ISODate("2017-09-28T08:42:19.770Z"),
"event_count" : 2
},
{
"session_start" : 1,
"session_complete" : 1,
"started_at" : ISODate("2017-09-28T08:53:08.618Z"),
"event_count" : 1
},
{
"session_start" : 1,
"session_complete" : 1,
"started_at" : ISODate("2017-09-28T09:19:42.726Z")
}
],
"session_id" : "12312312313123",
}
Run Code Online (Sandbox Code Playgroud)
我想在会话详细信息的最新项目中添加新字段和值,例如“ event_count”
{
"session_start" : 1,
"session_complete" : 1,
"started_at" : ISODate("2017-09-28T09:19:42.726Z")
}
and I want to update it and the array element should look like below:
{ …
Run Code Online (Sandbox Code Playgroud) mongodb pymongo mongodb-query aggregation-framework pymongo-3.x
我正在更新一个拥有数百万个文档的数据库,其中包含少于10个_id冲突.
我目前正在使用PyMongo模块使用insert_many执行批量插入:
几百万个文档中只有大约10个冲突,我正在查询每个_id的数据库.我认为如果我可以删除查询过程,我可以减少一到两天的总插入时间.
是否存在类似于upsert的东西,如果它不存在则只插入文档?
我刚刚将MongoDB和Pymongo升级到最新版本3.2.1,以便在调用update_one()后能够使用UpdateResult对象.但由于某种原因,返回的对象有一个包含AttributeError的字段.
看看我的Pycharm屏幕.你可以看到_UpdateResult__已经确认
'Traceback (most recent call last):
File "/opt/pycharm-community-5.0.4/helpers/pydev/pydevd_resolver.py", line 191, in _getPyDictionary
attr = getattr(var, n)
AttributeError: _UpdateResult__acknowledged'
Run Code Online (Sandbox Code Playgroud)
它导致我的问题,因为我试图捕获所有异常,每次我需要在我的代码中使用update_one()我得到这个异常.
这是我的代码片段:
QUERY = {id: '1234'}
try:
record = mongoCollection.find_one(QUERY)
if record is None:
print 'Add new Record'
else:
updateResult = mongoCollection.update_one(
QUERY,
{'$addToSet': {'info': getInfo()}}
)
if updateResult['modified_count'] == 1:
mongoCollection.update_one(
QUERY,
{'$inc': {'infoCount': 1}}
)
print 'Record exists, updating if needed'
except:
print 'Failed to add/update'
Run Code Online (Sandbox Code Playgroud)
幸运的是,我能够找到一个不会导致引发此异常的变通方法.而不是使用update_one(),我可以使用不推荐的函数update() …
我的要求有问题,包括解释。举例来说,以下要求非常有效:
pp.pprint(col.find({"cuisine":"Italian"}, {"name" : 1, "address.zipcode" : 1, "address.coord" : 1}).explain())
Run Code Online (Sandbox Code Playgroud)
说明方法的项目清单印刷得很好。
但是,当我只需要带有以下请求的explain()方法中的executionStats项时:
pp.pprint(col.find({"cuisine":"Italian"}, {"name" : 1, "address.zipcode" : 1, "address.coord" : 1}).explain("executionStats"))
Run Code Online (Sandbox Code Playgroud)
我有以下错误:
TypeError: explain() takes 1 positional argument but 2 were given
Run Code Online (Sandbox Code Playgroud)
有谁知道这是怎么回事,以及如何解决这个问题?
ty
我想弄清楚如何匹配一个键并返回该键的所有值。是否可以将值作为通配符给出?我想在值上使用通配符返回该特定键的所有内容。
db.collection.find({"key" :"*"})
Run Code Online (Sandbox Code Playgroud)
此外,我希望这也能返回整个集合,该集合的键也与通配符值匹配。
我使用下面的代码在 mongodb 中为具有空值的记录创建部分索引。当我执行下面的代码时。
db = self.db_conn[db_name ]
collection = db[collection_name]
status = collection.create_index([("Col1", pym.ASCENDING), ("Col2", pym.ASCENDING)], {partialFilterExpression : {"value": None}})
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误:
"name 'partialFilterExpression' is not defined"
Run Code Online (Sandbox Code Playgroud)
我的pymongo版本3.2.2 Mongodb版本3.4
我在 Python 中有这个代码:
import datetime
import re
import pymongo
from datetime import timedelta, date
def daterange(d, d1):
for n in range(int ((d1 - d).days)):
yield d + timedelta(n)
#conect to db
uri = "mongodb://127.0.0.1:27017"
client = pymongo.MongoClient(uri)
database = client['db']
collection = database['currency']
d = input('Insert beginning date (yyyy-mm-dd): ')
d1 = input('Insert end date (yyyy-mm-dd): ')
#search db
item = collection.find_one({"date" : d})
item1 = collection.find_one({"date" : d1})
d = collection.find_one({})
d1 = collection.find_one({})
datas = item['date']
datas1 = …
Run Code Online (Sandbox Code Playgroud) 我是第一次尝试 pymongo,但一直收到 ServerSelectionTimeoutError。使用 mongo 命令行登录时,我运行如下命令
$ mongo-3.0 --ssl test.net:27080/db_qa --sslAllowInvalidCertificates -u content -p
MongoDB shell version: 3.0.12
Enter password:
Run Code Online (Sandbox Code Playgroud)
我可以正常连接,但是使用 pymongo 时出现错误
pymongo.errors.ServerSelectionTimeoutError: test.net:27080: [Errno 60] Operation timed out
Run Code Online (Sandbox Code Playgroud)
我的代码如下
from pymongo import MongoClient
client = MongoClient('mongodb://content:<password>@test.net:27080/db_qa')
client.server_info()
Run Code Online (Sandbox Code Playgroud) 我面临 PyMongo 3.9 和日期时间对象的问题。在我的 MongoDB 4.x 服务器中,我有一个像这样的文档:
{
"_id" : 2,
"status" : "Running",
"start_date" : ISODate("2020-11-19T05:03:54.576Z")
}
Run Code Online (Sandbox Code Playgroud)
如您所见,start_date
位于 UTC 时区,但是当我使用 PyMongo 检索文档时,时区丢失了:
db.get_collection('my_collection').find_one({'_id': {'$eq': 2}})
Run Code Online (Sandbox Code Playgroud)
我在这里读到https://pymongo.readthedocs.io/en/stable/api/bson/codec_options.html Mongo默认返回一个天真的时区日期时间,为了获得一个意识时区日期时间,我应该添加这个选项到查询:
opts=CodecOptions(tz_aware=True)
db.get_collection('my_collection', codec_options=opts).find_one({'_id': {'$eq': 99}})
Run Code Online (Sandbox Code Playgroud)
但这意味着依赖开发人员的记忆来记住将此选项添加到每个查询中。所以我的问题是:有没有什么方法可以配置 MongoDB、PyMongo 或其他任何东西来始终返回感知时区日期时间对象?
太感谢了!
我目前正在转换 pymongo 3.2+ 驱动程序的更高级别 api。该代码可以在 pymongo 2+ 到 3.1 中运行。我正在尝试检索管理数据库的 replSetGetStatus 。
据我了解 pymongo 3.2+ 不允许查询管理数据库。我用谷歌搜索了一下,并没有发现关于这个主题的信息。有提示表明我需要使用 db.runCommand() 方法,但我不确定如何执行此操作。
我的旧 pymongo 2+ - 3.1 代码。
#connection = MongoClient
status = connection.admin['$cmd'].find_one({'replSetGetStatus': 1})
Run Code Online (Sandbox Code Playgroud)
我将如何将该行代码转换为与 pymongo 3.2+ 一起使用?
pymongo-3.x ×10
mongodb ×9
pymongo ×8
python ×5
python-3.x ×2
datetime ×1
performance ×1
pycharm ×1