问题标签 [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 回答
1106 浏览

node.js - 当父文档可能不存在时更新 MongoDB 子文档

这是我的数据,由一个书籍集合和一个books.reviews子集合组成。

在 Node.js(使用 Mongoose)中,我需要用户能够通过表单提交评论,将评论和书的 isbn 发送到服务器,条件如下:

  1. 如果该书不存在特定的 isbn,请添加它,然后添加评论(它显然不存在)。
  2. 如果这本书真的存在...
    • 如果此用户的此书不存在评论,请添加评论。
    • 如果此用户的这本书的评论确实存在,请更新它。

我可以用 4 个单独的查询来做到这一点,但我知道这不是最优的。我可以使用的最少查询数量是多少(当然,这些查询是什么)?

0 投票
0 回答
80 浏览

node.js - 使用 .elemMatch 将属性与父文档字段之一匹配。

我已经挣扎了一段时间,我似乎无法在这里找到答案。我想通过删除已指定列表中存在的子模式(使用 $nin:) 来过滤子文档中的子模式数组。我的问题是我要检查的列表在子文档的父级上,看看我想要做什么:

所以我的用户有一个名为 room in 的属性,而我有一个东西列表。用户还拥有一组“likedThings”的唯一 ID(不是 ObjectIds,字符串)。

我想要做的是获取房间的“事物”,其中 id 尚未在“likedThings”的用户列表中。

我的问题是当我在房间里“沮丧”时,我无法访问 User.likedThings。(没有 ../../ 类似的命令)。

我如何实现这一目标?

0 投票
0 回答
379 浏览

model - MEAN.js - 如何在保存之前将子文档插入到猫鼬模型中?

危险!我是 MEAN 堆栈的新手。我可能使用了错误的术语。我还从示例中删除并重构了很多代码,以使我的问题更清楚。

我有一个具有多个属性的架构,其中一个是混合类型。该混合类型是由另一个模式定义的子文档数组。这个另一个模式还有另一个混合类型的属性,包含另一个子文档数组,它由另一个模式定义。

在我的客户端控制器中,我创建了一个 MainStandard 实例,如下所示:

现在我想创建并插入历史对象...

当我这样做时,服务器端请求如下所示:

一个对象,你说?好吧,那是行不通的。所以我做了一些搜索并对自己说,“自我,你为什么不将 historyEntry 推入 mainStandard,然后将值推入 mainStandard.history.values?”

但这似乎也不起作用。我在浏览器的控制台中收到一条错误消息,提示 mainStandard.history.values 不存在。郁闷,打印出来。我看到它就在那里,在它的卷曲支撑,引用的荣耀中!嗯……但那不是一个 JavaScript 命名的数组吗?它可以解释为什么 Object 出现在上面。

在保存模型之前,如何填充(这可能是错误的术语)我的模型?

0 投票
1 回答
27 浏览

mongodb - 在另一个子文档中匹配子文档相同的文档

我的收藏中有以下文件:

我想要的是指定'usuarios.id'并通过'usuarios.id'存在的每个文档获取所有“roles.id”,“roles.nombre”。

我试过这个:

-- 首先声明一个带有我正在寻找的“usuarios.id”的变量

然后我执行这个:

但结果是这样的:

这是每个 rol.id 的产物,我期望得到的是这样的(只得到那些角色.id = usuarios.roles.id :

有任何想法吗??

这是我当前的脚本:

更新:

使用@yogesh 解决方案后,我对脚本做了一些改进:

添加了一个 $group ,我认为结果具有更好的结构:

再次感谢@yogesh

0 投票
1 回答
95 浏览

mongodb - 如何使用 MongoDB 的聚合管道从集合中的两个子文档中返回最小值?

我们在数据库中有一堆产品,每个产品都有两种货币价值。每个对象都有一个制造商、一个范围和一个描述,每个对象可以有一个月租金金额(对于租赁协议)、一个月付款金额(对于财务协议)或两者兼而有之。

一个示例对象是:

对于给定的制造商和范围,通常可以有多个对象。

我正在寻找一个聚合管道,它将返回每个不同制造商/范围对的最低月租金和最低月付款的列表,但我对如何使用聚合框架的有限知识似乎让我感到困惑。

如果有一个不同的制造商有两个不同的范围,我的预期结果将如下:

我正在使用以下方法来尝试实现这一目标,但我似乎在分组和使用$min

值得注意的是,在我的测试数据中,我故意没有为 Range B 指定租金,因为在某些情况下,租金和/或付款都没有针对给定的范围指定。

因此,对我的测试数据使用上面的查询会给我以下信息:

这很接近,但似乎我得到的是一个数组而不是最小值。我的印象是我正在尝试做的事情是可能的,但我似乎无法找到任何足够具体的资源来找出我做错了什么。

谢谢阅读。

0 投票
1 回答
384 浏览

node.js - Mongoose 子文档抛出所需的验证

这是我的架构

现在,我正在保存为

通过邮递员,我将 createdby 和受邀者 JSON 传递为

但是,我总是收到电话和电子邮件所需的错误。

我尝试了 stackoverflow 的各种解决方案,但没有任何效果。我也尝试传递单个值,{"email": "1","phone": "1"}但它也会引发错误。

我什至尝试如下修改我的架构,但我仍然收到验证错误。

谁能帮我指出我做错了什么?

0 投票
1 回答
1635 浏览

node.js - Mongoose 子文档预删除中间件未调用

我会阻止任何子文档被删除,因此我在每个子文档模式的 pre('remove') 中间件中添加了一个错误。

当调用 .remove() 函数时,它有效地调用了中间件。但是当它在没有调用 remove() 的情况下被删除时,中间件不会检查它是否已被删除。

重要的情况是当我从远程源接收对象时,我想通过 mongoose 中间件执行所有完整性检查,以将所有内容保持在同一个地方。无论是否错误,远程源都可能删除了子文档之一。因此,当 Mongoose 检查整个文档时,子文档已经被删除,而没有触发 .remove() 函数。

这是我的问题的最小工作示例:

所以我的问题是:有没有一种干净的方法来调用子文档删除中间件,而无需继续检查所有以前的元素并与新元素进行比较以查看哪些元素被删除?

0 投票
1 回答
205 浏览

arrays - MongoDb 子文档数组填充(通过 Mongoose ORM):调用填充时是否保持数组顺序

假设我在 Mongoose 中有 2 个 Schema,如下所示:

如果按照以下行进行查询:

数组中元素的顺序会保持不变吗?这里的目标是允许用户维护他们电影的播放列表顺序。如果在“填充”方法触发时,电影对象 ID 的数组顺序没有得到维护,那么这将不符合我的目的。因此,我想我会问在这方面知识更丰富的人。

如果这可行,那么我还有另一个任务是允许用户更改播放列表中电影的顺序,这应该是直接的,允许在数组中交换电影对象 id 索引。

提前感谢您的帮助。

0 投票
1 回答
562 浏览

mongodb - 如何在不同深度内搜索 MongoDB 嵌套子文档

我在 MongoDB 中有一些子文档,偶尔包含不同的类型 - 字符串、另一个子文档、另一个嵌套子文档等。我正在尝试构建一个查询,该查询将在此子文档内容中搜索,而不管其类型如何。

鉴于以下文件:

我想使用将在所有文档和子文档中的所有字符串中搜索的查询。已经尝试过以下查询,但它只返回子文档的最嵌套级别 - content.subdocument.family

是否可以创建一个一次性遍历所有嵌套字符串\深度的查询?

0 投票
1 回答
682 浏览

arrays - 如何使用 Monk 在 MongoDB 中插入带有子文档数组元素的文档

当我想在我的mongodb中插入一个带有mongodb的文档时,它有一个子文档的数组元素,函数将它错误地插入到数据库中。我这样调用插入函数:

接着:

但是我进入 BD 的内容是这样的(我上面写的示例在项目子文档中的属性较少):

我可以做些什么来获取带有子文档数组的元素的结构?我做错了还是插入失败了?

谢谢您的帮助!对不起我的英语不好。尼古拉斯。