问题标签 [subdocument]

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 回答
449 浏览

mongodb - Sails 和子文档 ObjectId()

我有一个现有的 MongoDB 集合,它基本上看起来像:

如您所见,我在子文档中使用对象 ID 将此数据与外部集合相关联,我们在其中存储有关数字的附加信息。所有这些 ID 都是由 Mongoose 在其他自动生成的应用程序中自动生成的。

现在,在 Waterline 中,没有对子文档的模式支持,因此当对集合执行 find() 时,子文档 ObjectId 将作为 JSON 返回,而不是 ID 字符串。

这导致类似

Mongoose 可以优雅地处理这个问题,您始终可以让这些 id 可用于在客户端执行相关查询,但是使用 Waterline,并且没有嵌套模式,这似乎是另一个死胡同。

有没有什么办法可以解决这个问题,而无需在返回之前遍历整个集合,不必迁移数据库、更改文档或不必对数据库进行规范化?此数据由多个应用程序访问,并且需要保持原样。

0 投票
1 回答
46 浏览

javascript - 未获取正确值的子文档组

我正在使用 AngularJS 对数组的所有子文档进行分组。它只能对子文档的第一项进行分组并给出长度我如何获得其正确长度的计数。我的plunk 链接

我现在得到的结果是

预期结果

HTML

控制器JS

JSON

0 投票
0 回答
100 浏览

mongodb - 如何使用猫鼬查询“跳过”和“包含”子文档

假设我有这个结构

Details子文档属于AccountAddress子文档属于Details

mongoose可以说检索特定的子文档或使用 findqueries 跳过另一个子文档吗?

就像是:

0 投票
1 回答
894 浏览

arrays - How can I omit elements from arrays inside nested documents with mongo?

I have the following structure for a collection in MongoDB

and I am trying to implement projection in my API: for example, if the user requests

The result should be

Since the 'fields' names are not actual keys, I cannot use mongo projection, say

db.collection.find({},{_id: 1, tags: 1, fields.'common field 1': 1})

So I must instead search within the array for the fields whose "name" property matches my projection parameter. I achieved that for the first level array with aggregation and $redact, as suggested in this answer https://stackoverflow.com/a/24032549/5418731

However, I cannot use $redact to select subfields from the inner arrays in multivalued fields. The $or parameters would have to be something like

[{ $not : "$name" }, { $eq: ["$name", "common field 1"] }, { $eq: ["$name", "subfield1"] }]

which means a first level field with the same name of the subfield specified would also pass.

After upgrading MongoDB to 3.2, I attempted the $filter solution in this answer https://stackoverflow.com/a/12241930/5418731, which also works fine for the first level array:

but I couldn't find a way to use it "nested" and filter the second level array items. Adding {$eq: ['$$field.value.name', 'subfield1']} doesn't work.

Last, I tried the $map solution presented here https://stackoverflow.com/a/24156418/5418731:

But this one won't work because the "value" property of each "fields" item is not necessarily an array, and when it isn't the whole query fails.

I'm about to give up and mask the results in JS. Is there a good solution for that with Mongo?

0 投票
2 回答
1216 浏览

node.js - 如何更新 MongoDB 中的子文档?

在 Mongoose 中创建的用于更新子文档的代码不起作用。所以我尝试在 Mongo Shell 中更新子文档。
这是文档(位置)和子文档(评论):

}

以下是我更新子文档的一些尝试:
这个问题给出了这种格式:

这返回了“未定义更新”的错误,如下所示:

我认为这是因为该命令不是以 db.locations.update()

MongoDB 文档使用了这种格式:

这将返回一个有效的更新,但实际上并未发生更新,如下所示:

这个问题使用了这种格式:

这将返回与 MongoDB 文档相同的结果,如下所示:

所以我猜这些查询是有效的,但我的数据没有得到更新。我的数据可能会被错误地索引吗?即使通过 Mongoose API 也可以更新实际位置。

0 投票
1 回答
692 浏览

mongodb - Spring MongoDB 数据聚合中的错误引用

我有以下类型的 mongodb 文档:

想要获取"subdoc.someRef"最早的唯一文档列表"date"(如果有相同的文档"subdoc.someRef")并按任何字段排序。问题在于按字段排序"subdoc.count"。我使用以下弹簧数据聚合:

一切都很好,除了弹簧数据如何转换: .first("count").as("count") 我总是得到"count":聚合结果中的 null 。spring 创建的 DBObject 不是我所期望的。日志中的那一行与我有关:

我无法理解为什么它总是放置"$subdoc.count"而不是放置"$count"作为聚合管道的上一步的结果。因此,结果中的“计数”始终为空,因为"$subdoc.count"在最后一个 grop 步骤中始终为空。如何让 Spring 使用我想要的值而不是引用?

0 投票
1 回答
303 浏览

javascript - Mongoose 子文档 - 未找到 ID

我花了几个小时处理大量的 console.logs 试图找出为什么这不起作用并且在这里缺少一些基本的东西:

该场景来自 Simon Holmes 的《Getting MEAN》一书(第 6 章)。很抱歉复制了整个函数,但我想确保我没有遗漏一些明显的东西。

我有一个定义如下的模式:

以及一些代码来读取具有特定评论的单个位置:

使用 Google Postman,我对 API 进行了查询:

但我得到了回应

这里让我感到困惑的是,我相信我引用了正确的评论子文档 ID,但不希望 JSON 显示这一点,Javascript 看不到它,并且可能解释了为什么 mongoose 函数不会返回它:

这是我的踪迹:

如您所见,找到了位置文档,找到了评论子文档,甚至可以打印出第一项的评分值。但是,尽管在 JSON 有效负载中显示为具有值,但该 ID 仍为空。

我在这里做错了吗?

一如既往,任何帮助表示赞赏。

乔恩

0 投票
1 回答
6166 浏览

arrays - MongoDB 从对象数组中的数组中删除一个项目

我有一个看起来像这样的文档:

我想删除数组中'e3d65a4e-2552-4995-ac5a-3c5180258d87'只有特定部分的.registered_id'56fea43a571332cc97e06d9e'

我目前的尝试是这样的,但它只是返回未修改的原始文档。

我已经查看了$pull,但我似乎无法弄清楚如何使它在包含另一个数组的嵌套对象数组上工作。这些$pull示例似乎都只处理一层嵌套。如何使用我提供的从registered数组中的项目的数组中sections删除匹配的条目_id

0 投票
0 回答
23 浏览

node.js - 根据子文档从文档列表中将输出创建为父子

我在数据库中有如下记录(http://www.jsoneditoronline.org/?id=cb05d8495014d3581acaf3fa466d5e4c

这里基于“controlprops”中的“ParentId”,“Id”,我想要具有父子关系的对象。

这里的输出会像(http://www.jsoneditoronline.org/?id=cb05d8495014d3581acaf3fa4617ea52):

如何使用 mongodb/mongoose 实现它?任何帮助将不胜感激。

0 投票
1 回答
154 浏览

mongodb - 基于查询语法未使用子文档的 MongoDB 索引

我将 Meteor 与 MongoDB 一起使用,其中包含如下文档集合:

我最初创建了一个这样的索引: collection._ensureIndex({'c.d': 1});

并运行这样的查询: collection.find({c: {d: 'd1'}). 这些运行非常缓慢,当我使用 explain() 进行调试时,我意识到它们没有使用索引。

OTOH,如果我运行这样的查询: collection.find({'c.d': 'd1'}),那么 Mongo使用索引。

我现在已更改索引以索引整个子文档,即collection._ensureIndex({c: 1}),第一个查询现在命中索引。

我的问题是,这是一个错误还是一个功能?我的印象是,在 JSON 中,这两种表示法是等价的,坦率地说,我希望数据库足够聪明,能够判断出这两个查询词指的是同一个字段并使用适当的索引。

我对索引整个子文档的解决方法的担忧是,最终,该子文档可能包含更多我不需要索引的字段,而且浪费时间和 RAM 保存我不需要的索引项似乎不是最佳选择。

如果这不是错误,有没有办法让 Mongo 识别嵌套对象语法并正确使用索引?