标签: pymongo

根据一组条件“串接”pymongo 查询

我需要使用一组条件从 mongodb 数据库(使用 pymongo)检索一些数据。其中一些条件是可选的,而其他条件可能具有多个可能值。

我想知道是否有一种方法可以根据这些条件“动态”构建 pymongo 查询(而不是为每个可能的条件组合创建单独的查询)。

例如,假设我有一个查询,该查询必须受限于以下条件:

  • tag包含任何this, is, a,tag
  • userjohnsmith
  • date_published是在之前today

...而另一个查询可能仅限于以下内容:

  • userjohnsmith
  • date_published是在之后today

摘要:在 pymongo 中,是否有一种方法可以将条件串在一起形成查询,而不必创建所有可能的条件组合?

python mongodb pymongo

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

Flask-PyMongo collMod

我正在尝试使用 PyMongo 更新 TTL 集合。试图运行这个我得到“失败没有这样的命令:索引”

client.db.command({'collMod': url,
                    'index': {'keyPattern': {'dateCreated':1},
                           'expireAfterSeconds': 3600}})
Run Code Online (Sandbox Code Playgroud)

有人能指出我做错了什么吗?

mongodb pymongo

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

如何在Python中提取mongoDB文档的最后一个objectID?

我想从 python 中的集合中提取文档的最后一个 objectID 并将其存储在 python 对象中。

我正在做这样的事情

db.dataset2.find().sort( {'_id': -1 } ).limit(1);
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误。

TypeError: if no direction is specified, key_or_list must be an instance of the list
Run Code Online (Sandbox Code Playgroud)

请帮忙。

python mongodb pymongo mongodb-query

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

pymongo 光标“触摸”以避免超时

我需要从 mongo (v3.2.10) 集合(使用 Pymongo 3.3.0)中获取大量(例如 1 亿个)文档并对其进行迭代。迭代需要几天时间,我经常遇到由于超时游标而导致的异常。

在我的情况下,我需要在迭代时睡眠不可预测的时间。例如,我可能需要: - 获取 10 个文档 - 睡眠 1 秒 - 获取 1000 个文档 - 睡眠 4 小时 - 获取 1 个文档等

我知道我可以:

  • 完全禁用超时,但如果可能的话,我想避免这种情况,因为如果我的代码完全停止运行,很高兴为我清理游标
  • 减少我的光标的batch_size,但是如果例如我需要像上面的例子那样睡4个小时,这将无济于事

似乎一个不错的解决方案是“触摸”光标以使其保持活动状态。因此,例如,我会将长时间的睡眠分成较短的间隔,并在每个间隔之间触摸光标。

我没有看到通过 pymongo 做到这一点的方法,但我想知道是否有人确切知道这是否可行。

mongodb pymongo

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

MongoDB 和 Python - 带列表的字典

将字典插入 MongoDB 后,如何从字典中获取列表?

例如,假设我将此条目存储在集合中:

{'Store': 'Store A','Brands':['Nike','Adidas','Reebok']}

如何访问“商店 A”并仅打印品牌列表?

我只想打印列表中的值:

Nike Adidas Reebok

我只是想学习如何使用 MongoDB,似乎在他们的文档中找不到类似的例子。任何帮助,将不胜感激!

python database dictionary mongodb pymongo

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

pymongo:未定义名称“ISODate”

当我尝试使用 pymongo 在 mongodb 中选择数据时遇到问题,这是我的代码:

import pymongo
from pymongo import MongoClient
import sys
from datetime import datetime

try:
    conn=pymongo.MongoClient('10.33.109.228',27017)
    db=conn.mnemosyne
    data_ip=db.session.aggregate({'$match':{'timestamp':{'$gte': ISODate('2016-11-11T00:00:00.000Z'),'$lte': ISODate('2016-11-11T23:59:59.000Z')}}},{'$group':{'_id':'$source_ip'}})
    for f in data_ip:
        print f['_id']

except pymongo.errors.ConnectionFailure, e:
    print "Could not connect to MongoDB: %s" % e
Run Code Online (Sandbox Code Playgroud)

当我执行它时,我有一些这样的错误:

Traceback (most recent call last):
  File "test.py", line 9, in <module>
    data_ip=db.session.aggregate({'$match':{'timestamp':{'$gte': ISODate('2016-11-11T00:00:00.000Z'),'$lte': ISODate('2016-11-11T23:59:59.000Z')}}},{'$group':{'_id':'$source_ip'}})
NameError: name 'ISODate' is not defined
Run Code Online (Sandbox Code Playgroud)

我想要这样的结果:

{ "_id" : "60.18.133.207" }
{ "_id" : "178.254.52.96" }
{ "_id" : "42.229.218.192" }
{ "_id" …
Run Code Online (Sandbox Code Playgroud)

python mongodb pymongo mongodb-query

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

PyMongo - 将属性中的所有值设置为小写

我正在清理一个数据集,并且有一个字段性别。在该字段中,有“男性”、“男性”和“男性”等条目。为了解决这个问题,我正在尝试使用 pymongo 更新我的 MongoDB 数据库。

在数据库中,Gender属性是Gender(前面有一个大写的G)

我的代码目前看起来像这样:

import pymongo
from pymongo import MongoClient


db_info = {
    'db_name': 'MentalHealth',
    'collection_name': 'MentalHealth',
}

if __name__ == "__main__":

    mongo_client = MongoClient()
    mongo_db = mongo_client[db_info['db_name']]
    mongo_collection = mongo_db[db_info['collection_name']]

    #normalize to lowercase
    mongo_collection.aggregate([{ '$project': { 'Gender':{ '$toLower':"$Gender"}}}])
Run Code Online (Sandbox Code Playgroud)

代码运行没有问题,但数据库没有更新,我不确定代码有什么错误。任何帮助将不胜感激。谢谢!!!

python mongodb pymongo

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

使用 pymodm 连接 MongoDB 服务器的 Python 脚本中的身份验证失败错误

MongoDB 服务器托管在 docker 容器中。创建了一个具有 root 权限的超级用户,可以使用用户名和密码登录。使用 pymodm 从 Python 脚本连接到 MongoDB 服务器。

我可以从 shell 和 Compass 工具连接到 docker 托管的 MongoDB 服务器。使用 Python 脚本以编程方式连接和插入新项目的努力因身份验证失败错误而失败。

脚本如下:

from pymodm import connect
from pymodm import MongoModel, fields
import urllib.parse

class Dummy(MongoModel):    
    email = fields.EmailField(primary_key=True)
    name = fields.CharField()

    class Meta:
        connection_alias = 'Mongo'

# Establish a connection to the database.
mongo_uri = "mongodb://monadmin:" + urllib.parse.quote("myPassword@123") + "@192.168.x.x:27017/Test"

# Establish a connection to the database.
def Connect2DB()
    try:
        #connect('mongodb://localhost:27017/PMOTest')
        connect(mongo_uri, alias="Mongo")
        print("db connection success")
        return True …
Run Code Online (Sandbox Code Playgroud)

python pymongo pymodm

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

通过地图集连接到 mongodb 的 Pymongo 错误

我正在尝试通过 atlas 和 pymongo 建立到我的 mongodb 数据库的连接。我正在使用 atlas 页面提供的连接字符串连接我的应用程序,一切似乎都运行良好。我可以连接到我的数据库,但是当我尝试计算我的数据库中有多少条目/检索/将数据发送到 atlas 时,我收到一条错误消息。

import pymongo
import dns

client = pymongo.MongoClient("mongodb+srv://username:<password>@storedinputs-vc4cl.mongodb.net/test?retryWrites=true")
db = client.get_database("dbname")
records = db.collectiontable

count = records.count_documents({})
print(count)
Run Code Online (Sandbox Code Playgroud)

然后我收到以下错误:

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issue
r certificate (_ssl.c:1056),storedinputs-shard-00-00-vc4cl.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] cer
tificate verify failed: unable to get local issuer certificate (_ssl.c:1056)
Run Code Online (Sandbox Code Playgroud)

我再次逐行尝试,一切正常,直到我尝试计算我的收藏中的文档数量。我很感激我能得到的所有帮助。

python ssl mongodb pymongo mongodb-atlas

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

从 pymongo 模块导入 MongoClient 时出错

我正在尝试从 pymongo 模块导入 MongoClient 类并收到以下错误

Traceback (most recent call last):
  File "pymongo.py", line 3, in <module>
    import pymongo
  File "C:\Users\Iqbal\Desktop\pymongo.py", line 5, in <module>
    client = pymongo.MongoClient()
AttributeError: partially initialized module 'pymongo' has no attribute 'MongoClient' (most likely due to a circular import)
Run Code Online (Sandbox Code Playgroud)

我已经安装了最新版本的 pymongo,即 3.10.1

import requests
import pymongo

client = pymongo.MongoClient()
Run Code Online (Sandbox Code Playgroud)

python pip mongodb pymongo python-3.x

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