AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[mongodb](dba)

Martin Hope
RiverHeart
Asked: 2025-03-05 01:54:35 +0800 CST

如何升级 MongoDB Arbiter 节点?

  • 5

通常我不会问问题,但我已经筋疲力尽了,预计自己会为此苦苦挣扎一段时间。对于问题审阅者,我没有发现任何问题涉及我遇到问题的 Mongo 版本,也没有发现任何与仲裁节点相关的错误。

总结:

仲裁器从 v6 升级到 v7 时失败,因为featureCompabilityVersion我读到过一个它不应该关心或使用的无效内容。

我是否遗漏了与仲裁节点的配置/升级有关的一些明显信息?

长版本:

我正在使用 Docker Compose 管理 Mongo 数据库的副本集,该副本集由 1 个主数据库、1 个辅助数据库和 1 个仲裁器组成。它们都使用映像,并具有卷来保存它们必须写入的任何数据。我的任务是使用Mongo 指令docker.io/bitnami/mongodb将它们的映像从 v5 升级到 v7 。

从 v5 升级到 v6 很顺利,因为 v6 向后兼容,只需要更新镜像版本。要升级到 v7,我登录到主节点的管理数据库并运行,db.adminCommand( { setFeatureCompatibilityVersion: "6.0" } )然后db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1})确认更改已生效。

我将 Compose 文件中的图像版本从 v6 更新为 v7,然后重新启动。主/辅助节点都很好,但仲裁器在关闭之前发出此错误,

升级问题:发现无效的 featureCompatibilityVersion 文档(错误:Location4926900:admin.system.version 中的 featureCompatibilityVersion 文档无效:{_id:“featureCompatibilityVersion”,版本:“5.0”}。请参阅https://docs.mongodb.com/master/release-notes/6.0-compatibility/#feature-compatibility。:: 导致原因:: 功能兼容性版本值“5.0”无效;预期为“6.0”或“6.3”或“7.0”。请参阅https://docs.mongodb.com/master/release-notes/6.0-compatibility/#feature-compatibility。 )。如果当前 featureCompatibilityVersion 低于 6.0,请参阅https://docs.mongodb.com/master/release-notes/6.0/#upgrade-procedures上的升级文档。

现在我读到仲裁器不应包含任何数据,并且仲裁器会忽略 FCV 以支持二进制文件报告的向后兼容性,如果属实,则应该是 v6,而不是错误状态的 v5。我尝试向仲裁器进行身份验证以在那里设置 FCV,但我得到了command setFeatureCompatibilityVersion requires authentication。

我是否遗漏了与仲裁节点的配置/升级有关的一些明显信息?

mongodb
  • 1 个回答
  • 7 Views
Martin Hope
Pantea
Asked: 2024-12-29 17:23:23 +0800 CST

如何在 MongoDB 中仅检索满足查询条件的数组元素

  • 5

我对 MongoDB 还很陌生,刚刚开始学习和使用它。我对查询有疑问。这是查询:

db.getCollection("user_plates").count(
    {
        "plates": {
            $elemMatch: {
                registerDate: {
                    $gt: new Date("2024-03-20T00:00:00.000Z"),
                    $lt: new Date("2024-03-21T00:00:00.000Z")
                }
            }
        }
    }
);

如您所知,如果查询在数组中找到至少一个满足两个条件的元素,它将返回该文档的所有元素。现在,我只需要该文档数组中的元素,该字段"registerDate"满足两个条件。我不想看到该文档数组的其他元素。我应该如何修改上述查询来实现这一点?

提前致谢

mongodb
  • 1 个回答
  • 41 Views
Martin Hope
ralmond
Asked: 2024-11-09 07:26:50 +0800 CST

在文档数组中查找不同的值

  • 6

我有一个充满文档的数据库,每个文档都包含一组交易:

[
  {
    "key": 1,
    "data": [
      {
        "trans": 1,
        "uid": 1
      },
      {
        "trans": 2,
        "uid": 1
      }
    ]
  },
  {
    "key": 2,
    "data": [
      {
        "trans": 3,
        "uid": 1
      },
      {
        "trans": 4,
        "uid": 2
      }
    ]
  }
]

我想在每个主文档中创建一个新字段,该字段具有该uid字段的唯一值。我可以使用以下方法实现部分功能$map:

db.collection.aggregate([
  {
    "$set": {
      "uid": {
        "$map": {
          "input": "$data",
          "as": "trans",
          "in": "$$trans.uid"
        }
      }
    }
  }
])

这给了我:

[
  {
    "key": 1,
    "uid": [1,1],
    "data": [
      {
        "trans": 1,
        "uid": 1
      },
      {
        "trans": 2,
        "uid": 1
      }
    ]
  },
  {
    "key": 2,
    "uid": [1, 2],
    "data": [
      {
        "trans": 3,
        "uid": 1
      },
      {
        "trans": 4,
        "uid": 2
      }
    ]
  }
]

这很接近,但我似乎无法弄清楚最后一步,我只想使用唯一值,所以uid第一个文档的应该是[1],而不是[1, 1]。

该distinct()函数适用于整个集合,而不是单个文档。

我认为这样$addToSet可行,但它不能对数组进行操作,只能对 的输出进行操作$group。我还尝试$reduce使用 创建规范$setUnion,但我不知道如何将我的数值提升到数组中。

我可以使用$unwind分组阶段_id来获取新字段的正确值,但我不知道如何将它们附加回原始对象。

mongodb
  • 1 个回答
  • 12 Views
Martin Hope
Niccolò Caselli
Asked: 2024-10-12 20:16:22 +0800 CST

MongoDB - 查找两个用户的分离度

  • 6

正如这篇文章所建议的,我在这里提出我的问题。

我有一个 MongoDB 集合,其中包含代表两个用户之间友谊的文档

{
  "_id":  "64a337de4538a04610900f0c",
  "user1": "6468022102781d442b82afd7",
  "user2": "648c7b6b75231cd99e43d7ab",
  "areFriends": true
}

我的目标是编写一个聚合函数,给定两个用户的 ID,返回它们的分离度。说得更清楚一点,就像这样:

  • 1 = 直接朋友
  • 2 = 朋友的朋友
  • 3+ 等等

我遇到了上面的 $graphLookup 示例,现在我想知道如何实现类似的东西。

我的情况与另一篇文章的区别在于,我的文档不是单向关系(从-到),而是双向关系(用户 1,用户 2);因此,无法保证想要的用户存储为用户 1 或用户 2。

在我的代码的其他部分,我通过对输入 ID 进行排序或使用如下条件解决了这个问题:

  $cond: {
              if: { $eq: ['$user1', userId] },
              then: '$user2',
              else: '$user1',
          },

但是,据我了解, $graphLookup中不支持条件(例如connectFromField)

有谁知道如何面对这个特殊问题吗?我将不胜感激。谢谢。

编辑 这是 Ray 提出的聚合管道的修订版本

      { $match: { user1: id1 } },
      {
        $graphLookup: {
          from: 'spots',
          startWith: '$user1',
          connectFromField: 'user2',
          connectToField: 'user1',
          as: 'friendshipsViewLookup',
          depthField: 'degree',
          maxDepth: 2,
        },
      },
      {
        $unwind: {
          path: '$friendshipsViewLookup',
          preserveNullAndEmptyArrays: true,
        },
      },
      { $match: { 'friendshipsViewLookup.user2': id2 } },
      {
        $project: {
          user1: 1,
          user2: '$friendshipsViewLookup.user2',
          degree: {
            $add: ['$friendshipsViewLookup.degree', 1],
          },
        },
      },
      {
        $group: {
          _id: { user1: '$user1', user2: '$user2' },
          minDegree: { $min: '$degree' },
        },
      },
      {
        $project: {
          user1: '$_id.user1',
          user2: '$_id.user2',
          degree: '$minDegree',
        },
      }
mongodb
  • 1 个回答
  • 46 Views
Martin Hope
Numaira Nawaz
Asked: 2024-09-27 20:18:22 +0800 CST

为什么 MongoDB 中的 response._id 显示为对象而不是对象 ID?

  • 5

我在 Node.js 应用程序中使用 Mongoose 处理 MongoDB。当我从数据库中检索文档并记录 _id 字段时,我期望它是 ObjectId 类型,因为这是 MongoDB 中 _id 的默认类型。但是,当我使用 typeof 记录 response._id 的类型时,它显示对象:

console.log(typeof response._id); // Output: "object"

response._id 的实际值类似于:

new ObjectId('66f68edc89d2d956b7a2fe7d')

我的问题是:MongoDB 中的 ObjectId 是否被视为 JavaScript 中的对象?response._id 的类型不应该是 ObjectId 而不是 object 吗?如何确保在我的 TypeScript 代码中将该类型正确视为 ObjectId?其他详细信息:我在 Node.js 环境中使用 Mongoose。文档检索和其他一切都运行良好,但我对 typeof 结果感到困惑。

mongodb
  • 1 个回答
  • 29 Views
Martin Hope
SqlDBA
Asked: 2024-09-13 08:08:06 +0800 CST

根据创建时间或证书编号字段获取每个证书编号的最新记录

  • 5

我正在尝试复制每个证书编号值的最新记录。我们每个证书都有多个文档,并尝试获取每个证书的最新记录并将其复制到新集合中。

数据如下:

{ "_id": ..., "certnumber":"123456", "createtime": "2024-02-03T16:42:20.324Z", "company": "A" ,.....}
{ "_id": ..., "certnumber":"123456", "createtime": "2024-02-03T16:32:20.324Z", "company": "A" ,.....}
{ "_id": ..., "certnumber":"123456", "createtime": "2024-02-02T14:28:20.324Z", "company": "A" ,.....}
{ "_id": ..., "certnumber":"123456", "createtime": "2024-02-02T13:22:20.324Z", "company": "A" ,.....}
{ "_id": ..., "certnumber":"654321", "createtime": "2024-02-05T17:42:20.324Z", "company": "B" ,.....}
{ "_id": ..., "certnumber":"654321", "createtime": "2024-02-05T16:42:20.324Z", "company": "B" ,.....}
{ "_id": ..., "certnumber":"654321", "createtime": "2024-02-03T15:32:20.324Z", "company": "B" ,.....}
{ "_id": ..., "certnumber":"654321", "createtime": "2024-02-03T14:22:20.324Z", "company": "B" ,.....}

我尝试使用以下命令收集最新记录,它有效,但只返回 2 个字段。如何提取整个文档而不是仅提取 2 个字段?

db.collectionname.aggregate(
   [
     { $sort: { certnumber: 1, createtime: 1} },
     {
       $group:
         {
           _id: {certnumber : "$certnumber" },
           updatedDate: { $last: "$createtime" }
         }
     },
   ],
)
mongodb
  • 1 个回答
  • 14 Views
Martin Hope
antisuri
Asked: 2024-06-18 00:48:35 +0800 CST

从 MacOS 中删除 mongoDB

  • 5
该问题已从 Stack Overflow迁移,因为它可以在数据库管理员 Stack Exchange 上找到答案。 已于 7 天前迁移 。

我需要删除我的 Mac 中的所有 mongoDB 内容。

我按照mongoDB 卸载官方指南中的卸载指南进行操作

但在第二步

`launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist
rm -f ~/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist
launchctl remove homebrew.mxcl.mongodb-community`

我收到此错误: Unload failed: 5: Input/output error Try running "launchctl bootout" as root for richer errors.

mongodb
  • 1 个回答
  • 20 Views
Martin Hope
Betty Liv
Asked: 2024-06-09 21:46:52 +0800 CST

在 C 盘以外的驱动器上安装 MongoDB

  • 5

在安装 MongoDB Community 7.0 的过程中,安装程序会询问数据库的路径,我将它们指向专用的 50GB 空驱动器 E:,这是专门为 MongoDB 创建的。

下一步表明目标驱动器 C: 没有足够的空间。下面的驱动器列表显示了 C: 和 E:,但 E: 是不可选择的。

MongoDB 不能安装在 C: 以外的任何驱动器上吗?

mongodb
  • 1 个回答
  • 9 Views
Martin Hope
Shamil
Asked: 2024-05-09 20:19:40 +0800 CST

如果 SSTable 已排序,为什么还需要稀疏索引?

  • 5
这个问题是从 Stack Overflow迁移来的,因为它可以在 Database Administrators Stack Exchange 上找到答案。 4 天前迁移 。

据我所知,当我们创建聚集索引时,它会以 B 树形式重组表,并在我们尝试查找特定行时使用二分搜索。SSTable也是按key排序的。为什么我们需要稀疏索引作为这种情况的参考表?如果按键排序,它与 B 树在搜索方面有何不同?为什么应用二分搜索还不够?

我试图找到稀疏索引的确切用法,并试图理解如果我们不需要聚集索引这种东西,为什么需要它作为参考表,并且我没有找到这个问题的任何答案。

mongodb
  • 1 个回答
  • 18 Views
Martin Hope
MiH
Asked: 2024-03-20 18:05:22 +0800 CST

如何仅使用两个节点设置 mongo 同步?

  • 5

我尝试安装两个 mongo 节点,每个节点位于不同的位置,延迟较低。架构应该是:

  • 一个节点位于 DC,另一个节点位于 DR。假设一次只有一个节点是主节点(DC 中的节点),如果 DC 宕机,DR 中的节点可以成为主节点(可以手动将其提议为主节点)。

  • 当 DR 中的节点被手动更改为主节点时,我可以有时间再次启动 DC 中的节点,等待数据同步到 DC,然后降级 DR 中的节点,再次将 DC 中的节点更改为主节点。

我不确定副本集是否可以应用于此。请帮我解决这个问题。

谢谢。

mongodb
  • 1 个回答
  • 16 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve