问题标签 [pymongo-3.x]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
77 浏览

javascript - 两小时MongoDB聚合

这是我的示例数据:

}

我正在尝试按两个小时的间隔对平均值进行分组,并进行以下聚合查询。

这给了我一个错误说法 A pipeline stage specification object must contain exactly one field.,我已经完成了所有研究,但无法获得预期的结果。

0 投票
0 回答
36 浏览

python - 为什么 pymongo `find` 会产生不一致的行为?

我有一个包含约 3000 万个文档的 MongoDB 数据库。它由一台多处理器计算机(144 GB RAM,运行 CentOS 7.1)提供服务,而不是分片。我使用 Python 3.4 使用 pymongo 3.2.2 查询它。数据库使用较少,目前有少量编写者更新记录。这是find不返回一致结果的情况:

多次运行时,此代码有时会打印 72,有时会打印更大的数字(超过 2874400)。较大的数字并不总是相同的,根据我对数据的了解,较大的数字更有可能是正确的。尽管如此,我还是无法解释为什么它有时会打印 72。

这种不一致行为的潜在原因是什么?

(注意:是的,我知道我可以使用count(...)运算符来计算匹配文档的数量。上面的代码是片段,旨在说明不一致性,而不是提供一种计算匹配文档的有效方法。)

0 投票
1 回答
1075 浏览

python - python 3 asyncio 和 MotorClient:如何将电机与多线程和多个事件循环一起使用

我带着一个关于 asyncio 的问题回来了。我发现它非常有用(尤其是由于带有线程的 GIL),并且我正在尝试提高某些代码的性能。

我的应用程序正在执行以下操作:

  • 1 后台守护线程“A”从连接的客户端接收事件,并通过填充 SetQueue(即删除重复 ID 的事件队列)和在 DB 中进行一些插入来做出反应。我从另一个模块得到这个守护进程(基本上我控制从收到事件时的回调)。在下面的示例代码中,我将其替换为我生成的线程,它非常简单地用 20 个项目填充队列并在退出之前模拟 DB 插入。
  • 1 后台守护线程“B”被启动(loop_start),他只是循环运行直到完成一个协程:

    • 获取队列中的所有项目(如果不为空,否则释放控制 x 秒,然后重新启动协程)
    • 对于队列中的每个 id,它会启动一个链式协程,该协程:

      • 创建并等待仅从数据库中获取该 ID 的所有相关信息的任务。我正在使用支持异步的 MotorClient 在任务本身中等待。

      • 使用进程池执行程序启动每个 id 的进程,该进程使用 DB 数据执行一些 CPU 密集型处理。

  • 主线程只是初始化 db_client 并接受 loop_start 和 stop 命令。

基本上就是这样。

现在我正在尝试尽可能提高性能。

我目前的问题是以motor.motor_asyncio.AsyncioMotorClient()这种方式使用:

  1. 它在主线程中初始化,我想在那里创建索引
  2. 线程“A”需要执行数据库插入
  3. 线程“B”需要执行 DB 查找/读取

我怎样才能做到这一点?Motor 声明它适用于单线程应用程序,您显然使用单个事件循环。在这里,我发现自己被迫有两个事件循环,一个在线程“A”中,一个在线程“B”中。这不是最佳的,但我没有设法在 call_soon_threadsafe 中使用单个事件循环,同时保持相同的行为......而且我认为性能方面我仍然通过两个释放对 gil 绑定 cpu 核心的控制的事件循环获得很多.

我应该使用三个不同的 AsyncioMotorClient 实例(每个线程一个)并如上所述使用它们吗?我在尝试时因不同的错误而失败。

这是我的示例代码,它不只包括异步中的 MotorClient 初始化__init__

0 投票
1 回答
3790 浏览

python - Pymongo 读取首选项 - ServerSelectionTimeoutError:没有可用于写入的主节点

当连接到 MongoDB 副本集时,我能够从辅助节点读取,但之后,当使用相同的连接写入时,我收到以下错误:

Python 3.4.3 Pymongo 3.2.2

我的连接:

重要提示:删除“replicaSet”和“readPrefence”字段时,连接正常。

在服务器中:

db.isMaster()

mongodb0

mongodb1

mongodb2

0 投票
1 回答
795 浏览

python - 如何强制 pymongo 关闭套接字?

我目前正在研究分布式计算。我的工作人员通过将结果插入 mongoDB 数据库来返回结果。代码运行良好,但连接仍然打开,并且有一刻我的系统用完了套接字。这是我的工人代码:

通过使用此命令“netstat -anbo”,我可以看到所有套接字仍然打开(超过 3000 个),工作人员的最大数量为 14,但他们必须处理超过 10 000 个任务。

我试图设置超时,但它没有任何效果。

如何在不重新启动数据库的情况下关闭套接字?

Python 2.7.12 Pymongo 3.3 mongoDB 3.2.10

0 投票
1 回答
75 浏览

windows - pymongo 不会工作 :( 尝试了一切

嗨,这里有点沮丧,任何帮助都会很棒嗨我正在使用 Windows Server 2012 R2 我已经安装了 python 2.7.13

但是当我运行我的代码时,我得到了

我试过卸载pymongo,然后卸载python,然后重新安装python,然后按顺序重新安装pymongo - 我仔细检查了计算机上没有其他版本的python,但我仍然无法让它工作......

有任何想法吗?

ps我的代码是

0 投票
1 回答
371 浏览

python - 获取作为给定大小列表列表返回的 pymongo .find() 结果

我正在使用一个太大而无法完全加载到内存中的 MongoDB 集合,我想使用 PyMongo 来处理它。

对于每个项目,我必须在另一个集合中进行搜索并将一个函数应用于结果。

我想出的第一个算法是:

但是对每个元素执行搜索只会花费太多时间,因为它每次都必须等待服务器响应。

为了减少每个元素的等待时间,我尝试一次使用批量 - 比如说 500 个 - 文档。

我发现如何做到这一点的唯一方法是在游标上使用 next() 方法

然而,这似乎很hacky。有没有办法对集合执行搜索并将结果作为给定大小的批次列表返回?

0 投票
2 回答
2552 浏览

python - MongoDB 最近 30 天数据

我在 mongo 数据库中有这些数据,

我的目标是计算过去 30 天满足给定范围的温度、ph 值和电导率值,但我遇到了一个错误,我在网上搜索时无法解决。这是我的代码。

当我在没有 ValidationDate 片段的情况下运行脚本时,它会返回正确的值,但添加此数据组件以获取过去 30 天的数据会返回以下错误

我在这里真正想念什么?提前感谢您的帮助

0 投票
1 回答
642 浏览

mongodb - 使用 pymongo 在 mongodb 中跳过数据验证

是否可以使用 pymongo 在 mongodb 中跳过验证?

我想从 pymongo 运行以下查询:

非常感谢任何帮助。

谢谢,阿什温。

0 投票
2 回答
18389 浏览

python - pymongo:ImportError:没有名为 pymongo 的模块

我使用成功安装了 pymongopip3

然后我在 python 中编写了一个写入 MongoDB 的测试脚本。但是当我执行它时,我收到以下错误:

蟒蛇版本:Python 3.5.2

这是路径的样子:

在谷歌上搜索。在stackoverflow上发现了这个问题:ImportError: No module named 'pymongo'然后指向stackoverflow上的另一个页面:导入pymongo ubuntu失败

但是,即使在此之后,我也面临同样的问题。我无法导入 pymongo 模块。

编辑:我正在尝试更多的东西来解决这个问题。使用 IDLE,我可以导入 pymongo 并轻松地将记录插入 MongoDB。

但是我仍然无法从 python 脚本中导入它。