问题标签 [couchdb-mango]

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 投票
2 回答
838 浏览

python - 在 Python 应用程序中的 CouchDB 中创建视图

我在 CouchDB 中有一个数据库,我想知道是否可以直接从 python 创建视图而不是使用 GUI。我是 CouchDB 的初学者,我需要一个与 SQL 中的 SELECT DISTINCT 等效的函数和一个类似的视图

是理想。问题是我必须为更多MovieId的 s 做这个视图(取自键盘输入)。

我在问你是否可以直接从 python 创建/删除这样的视图,因为在网上我什么也没找到。如果不可能,我自己进行 Mango 查询和映射结果是个好主意吗?

- -编辑 - -

我收到此错误,但没有具有此名称的文档

0 投票
1 回答
68 浏览

couchdb - 如果 id 包含子字符串,则 CouchDB 中的 Map/reduce 获取一个字段

我会解释:我有这个功能

但它返回给我一些不相关的文件(例如他们没有评级字段)。我的文档 _id 由 partitionName:id 组成,所以我想这样做,if(doc.MovieId == "1721" && doc._id.contains("ratings"){...}但它不起作用。有没有办法做到这一点?

-----编辑 1----- 没有名为的字段的文档 圆圈中的文档不相关。您需要 JSON 文档的架构吗?

-----编辑 2----- 以下文件不相关 1。

2.

3.

像这样的文档是相关的:

0 投票
1 回答
195 浏览

couchdb - 如果字段包含子字符串,如何选择文档

我有一个 movielens 数据库,例如,要搜索标题中包含“泰坦尼克号”的所有文档,我运行这个 Mango 查询:

我有我想要的。所以我现在的问题是:只有当我记得一个子字符串时才能选择一个文档?

例如,对于标题“Tomb raider”,我记得包含“raider”。我尝试过使用正则表达式,但它不起作用。

0 投票
1 回答
36 浏览

couchdb - 可以在 CouchDB 中对视图进行排序吗?

我是 CouchDB 的新手,我想知道是否可能以及如何在 CouchDB 中对视图进行排序。

PS:我正在使用 CouchDB 3.0.0

0 投票
1 回答
218 浏览

couchdb - 对 couchDB 的数组字段应用过滤器

我正在研究 Hyperledger 结构。我需要数组中的特定值而不是 CouchDB 中的完整文档。

例子

我只想要历史数组上的电子邮件:“i2@mail.com”对象,而不是完整的历史数组。

芒果查询:

输出:

完整的历史数组但只需要历史数组的第一个对象

谁能指导我?

谢谢。

0 投票
1 回答
127 浏览

couchdb - 在 CouchDb 中为 _find 和 MapReduce 查询读取 quorum

CouchDb文档指出,默认情况下,对单个文档的读取和写入都是仲裁读取和写入(例如r=2w=2在 3 副本系统中)。

但是,文档_find说 r “默认为 1,在这种情况下返回在索引中找到的文档。如果设置为更高的值,则每个文档在返回之前至少从那么多副本中读取......”它我不是 100% 清楚,但这到底意味着什么。如果我运行_findr=2在单个节点的索引中找到一个文档,我认为很明显它还会从第二个节点获取该文档并将最新的返回给我。但是,我认为它仍然只检查一个节点上的索引,因此无法保证健康集群中的一致性。

例如,假设我有一个健康的 3 节点集群,没有网络分区。该集群中的数据库有一个 Mango 索引,其中包括字段foo,我通过 查询_find所有带有foo=bar. 假设最初的文档X具有价值foo=baz,因此X不应返回。现在,我更新X设置foo=bar并使用w=2. 然后我立即重新运行我_find的 with r=2。如果仅在一个节点上查询索引X,那么即使使用r=2. 也一样r=2仅意味着在一个节点的索引中找到的文档也将在第二个节点上查找,或者这是否意味着 2 个节点上的索引将运行查询并合并它们的结果。

此外,似乎相同的索引和r=1默认值可能适用于 JavaScript MapReduce 视图,但我没有看到这种情况的等效文档。MapReduce 视图查询是否默认为r=1or r=2

0 投票
0 回答
1010 浏览

couchdb - How to use CouchDB Mango query (/db/_find) with an index to select multiple _id keys

I am using CouchDB 3.1.1 to perform Mango queries against a database containing a large number of documents. A very common requirement in my application is to perform queries on a very specific and dynamic set of documents. From what I understand at this moment, these are the only choices I have on how to confront my problem:

  1. Make multiple requests to /db/_find each with a distinct "_id"
  2. Make a single call to /db/_find

Of the ways I can accomplish the second choice:

  • Use an "$or" array on all the "_id": value pairs
  • Use an "$or" array on all the values of the "_id" key

The second choice is what I would prefer to use since making multiple POST requests would incur overhead. Unfortunately using "$or" seems to get in the way of the query engine making use of the "_id" index.

Thus, choice #1 returns with a speedy 2 ms per transaction but the results are not sorted (requiring my application to do the sorting). Choice #2, given an array of 2 _ids, regardless of the $or syntax, takes over 3 seconds to render.

What is the most efficient way to use a CouchDB Mango query index against a specific set of documents?

Fast Example: Results using a single _id

documents examined: 26,312
results returned: 1
execution time: 2 ms

Slow Example: Results using $or of key / value pairs

documents examined: 26,312
results returned: 2
execution time: 2,454 ms

Slow Example: Results using $or array of values

documents examined: 26,312
results returned: 2
execution time: 2,522 ms

Slow Example: Results using $in (which is illegal but still returns results)

documents examined: 26,312
results returned: 2
execution time: 2,618 ms

Index: The registered index for _id

Explain: An 'explain' summary done to one of the slow queries. Note that the registered index was used.

0 投票
1 回答
53 浏览

couchdb - 搜索日期范围包含查询日期值的子对象

假设我们正在处理跨多个渠道(报纸、工作委员会等)的各种职位空缺的广告。对于每个频道,我们可以购买一个“发布期”,这意味着该频道将在此期间宣传我们的职位空缺。我们如何找到给定频道的发布期为今天有效(即从今天或之前开始,到今天或之后结束)的工作?目的是能够生成“活动”职位空缺的馈送,(例如)工作板可以定期消费以确定哪些职位应该显示给它的用户。

另一个问题是,每个职位空缺都与给定的租户 ID 相关联:必须在租户和频道的范围内生成提要。

假设我们有以下简化的文档(如果您认为应该对数据进行不同的建模,也请告诉我):

如何查询与“monster.com”的有效发布期为 2021 年 3 月 17 日的租户“foo”相关联的工作?(即这个查询应该返回工作 A 和 B。)

请注意,数据库将包含其他(不相关)类型的文档。

因为我本质上需要“在publication_periods数组中找到包含对象的所有职位空缺:CHAN 作为通道值,“start”<= DATE,“end”>= DATE”看来我需要一个 Mango 查询来实现这一点,因为标准视图查询不提供比较运算符(如果这是错误的,请纠正我)。

自然,我希望 Mango 查询仅在相关数据上执行(即排除不是职位空缺的文档),但我可以找到有关如何执行此操作的参考资料(无论是在文档中还是在其他地方):我找到的所有资源只是似乎在整个文档集上定义了芒果索引,依赖于没有索引字段的文档不会被索引的事实。

我怎样才能实现我所追求的?

最初,我正在考虑创建一个视图,该视图将与对象一起发出发布期间信息{'_id': id},以便在查询时将职位空缺文档“加入”到匹配期间(根据执行一对多“JOIN”的最佳方式" 在 CouchDB 中)。但是,我意识到我无法根据需要查询此视图(即今天之前的“开始”值,今天之后的“结束”值),因为我没有明确的开始/结束键可以使用......而且我不知道如何为此正确利用 Mango 索引/查询。大概我必须根据文档类型和出版期的存在创建一个部分索引,但是我什至如何索引可以位于单个文档中的多个出版期?可以针对特定视图而不是数据库中的所有文档定义 Mango 索引吗?

0 投票
1 回答
469 浏览

node.js - CouchDB Mango 查询 - 将任何键与数组项匹配

我有以下文件:

我需要一个 Mango 选择器来检索文档,其中绑定的任何字段(主题、对象等)都有一个对象,其键等于作为参数传递的数组中的任何值。即,if keys of binds contains any values of some array it should returns that document

例如,考虑["Test2"]我的选择器应该检索的数组,doc1因为它binds["subject"]["Test1"]存在;数组["Test1"]应该检索doc1anddoc2并且数组["Test2", "Test3"]也应该检索doc1and doc2

仅供参考,我正在使用带有nano lib 的 Node.js 来访问 CouchDB API。

0 投票
1 回答
163 浏览

couchdb - 即使手动指定芒果索引“不包含此查询的有效索引”

我正在尝试通过 Mango 有效地查询数据(因为这似乎是我的要求的唯一选择Searching for sub-objects with a date range contains the queried date value),但我什至无法获得一个非常简单的索引/查询对工作:虽然我为查询手动指定了我的索引,但我被告知我的索引“未使用,因为它不包含此查询的有效索引。找不到匹配的索引,创建一个索引以优化查询时间。”

(我在 CouchDB v. 3.0.0 上通过 Fauxton 完成所有这些工作)

假设我的文档如下所示:

所有带有$doctype“JobOpening”的文档都保证具有tenant属性。我希望执行的搜索将只针对具有$doctype“JobOpening”的文档,并且tenant在查询时将始终提供选择器。

这是我配置的测试索引:

这是查询

为什么不使用索引进行查询?

我试过不使用部分索引,我认为$doctype转义在必要的地方正确完成,但似乎没有什么可以阻止 CouchDB 执行完整扫描。