问题标签 [mongoose-schema]

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

javascript - 在更新使用 Mongoose 模型检索并作为承诺处理的文档时遇到问题

跳转到更新 #2 以获得更详细的信息

我对通过 Mongoose 模型查询容器检索到的文档进行简单更新时遇到问题。该find查询确实有两个群体,但除此之外,我不确定问题可能是什么

我遇到的问题是,当我检索文档,更新属性,然后尝试通过 MongoosesDoc.save()方法将更新保存到文档时,似乎什么也没发生。奇怪的是,save() 甚至没有触发传递给它的回调..(或者触发then()或者catch()如果我将其作为 Promise 处理)

型号:资产

只是为了一些细节,这里有一个来自相同查询的示例结果,find具有相同的两个群体

文件查询

这是我通过该方法检索一些文档的代码示例Foo.find(有效),并更新第一个属性的值(我有效),但是当我尝试访问a.save()文档时..没有任何反应:

在控制台中,一切都按预期显示,直到a.save().. 既不显示错误也不Updated!显示。

这绝对是我正在与之交互的 Mongoose 文档(a instanceof Foo显示为真),所以我完全不确定为什么 save() 没有做任何事情..

我尝试将其a.save()作为 Promise 进行处理,而不是对其进行回调,然后再一次,什么也没发生,thenor也没有catch被执行。

这真让我抓狂!!我确定它是我忽略的一些愚蠢的东西,但我似乎找不到它。任何帮助将不胜感激

PS我没有包括分区字段模型/模式,因为我非常怀疑它们是否相关......但如果有人这么认为,请告诉我

PSS仅供参考,MongoDB 用户确实具有写入权限

更新#1

根据@JohnnyHK 的建议,我尝试执行Doc.markModified()

没有变化...a.save()控制台中不显示任何内容,并且文档未更新

更新#2

经过一番修修补补..这似乎与它是一个承诺有关..

这是成功的:

这是不成功的:

我能想到的唯一区别是承诺,而不是回调

什么超级奇怪......是.then()执行中的一些代码......只是不是save()

更新#3

我创建了一个github 问题,并且根据我上次的更新..

我发现了这个问题,他的“解决方案”是将整个主要版本从 4.X 降级到 3.X...

我当前的版本是^4.3.7,我尝试将其更改为3.8.35,降级顺利,但脚本本身引发了一堆错误......老实说,id 真的不使用这么旧的反正版本。

0 投票
1 回答
112 浏览

node.js - 如何为给定的集合定义猫鼬模式?

所以这只是一个简短的版本,会有很多日期和时间段。我想在猫鼬中定义模式,以便我可以查询数据库。模式应该如何,因为我很困惑如何概括每个日期。以及在定义的模式中,如果特定时间段,我将如何编写查询以更改特定日期的可用性?

0 投票
2 回答
9450 浏览

javascript - 为任何更新查询增加 Mongoose 文档版本的简单方法?

我想开始利用 Mongooses 文档版本控制(__v 键)。我在实际增加版本值时遇到了问题,然后我发现您必须this.increment()在执行查询时添加。

有没有办法自动增加?现在,我只是将它添加到pre中间件中以进行更新类型的查询:

这似乎可行..但我有点认为猫鼬已经有办法做到这一点..我错了吗?

0 投票
2 回答
831 浏览

mongodb - 合并两个 Mongoose 查询结果,而不将它们转换为 JSON

我有两个 Mongoose 模型模式设置,以便子文档引用父文档,而不是父文档具有一组子文档。(由于对文档的 16MB 大小限制,我不想限制父/子文档之间的关系数量):

我想创建一个静态方法,我可以查询父文档,然后查询与父文档匹配的任何子文档,然后在父文档中创建一个将引用子数组的新项目。

基本上,如果父文档是:

子文件是:

然后我希望有类似的东西:

另外,我希望它们保留 Mongoose 文档,以便在需要时更新父母和资产。

我能够通过toJSON在 Parent 上使用来完成此操作,然后创建一个包含 Child 文档的新项目,但显然 Parent 文档不是真正的文档..

当我尝试这样做时,我一直遇到的错误是我无法在文档中创建一个不在架构中的新元素。

我知道我可以做一些事情,比如创建一个虚拟项目,它会返回查询孩子的承诺,但我希望有一个静态方法,返回一个响应(这意味着他们不必将虚拟项目作为承诺或回调处理)

让我知道这是否可能。谢谢!

0 投票
0 回答
38 浏览

node.js - 如何用猫鼬保存子文档对象 ID,以及它的一些字段?

我想保存 Tower obj 和 flat obj。塔式架构

平面模式

我正在尝试用 mongoose save 来保存它

我的输出应该是这样的

我是 mongoose 和 Node 的初学者。请在这里帮助我。

0 投票
1 回答
1946 浏览

node.js - findOne 没有返回正确的结果(Mongo DB 和 nodejs)

我在集合中存储了一个文档,当我尝试通过 findOne 检索它时,它返回了错误的结果:我的 Mongoose 模型就像:

然后我在我的 server.js 中使用它作为:

当我试图找到已经插入的记录时,如下所示:

它无法找到该记录,但它返回的可能是第一条记录。thedb中存在以下记录: 在此处输入图像描述

当我尝试添加另一家公司并使用此 findOne 检查此名称是否已存在时,findOne 仅返回此记录。我的日志片段

在此处输入图像描述

而 mongo shell 只返回正确的结果。

在此处输入图像描述

在 mongo shell 中,我在字段和值周围使用“”,而不是在 findOne Api 中。提前致谢

0 投票
1 回答
675 浏览

javascript - Mongoose schema for array of sub-documents ids from a different collection

I have a schema like this for a family (whose children are enrolled in a school)...

I'd like to describe many schools that contain classrooms, and have the classrooms contain students, something like this...

How do I tell mongoose that I want an array of object ids for students found in the other collection?

I understand from this answer that, if I wanted the classrooms to refer to family documents, I could say something like:

but how do I do the same for sub-documents of another collection? (If it isn't obvious, I'm just learning both mongo and mongoose).

0 投票
1 回答
843 浏览

node.js - Mongoose 聚合查询 $max in $match

我是猫鼬的新手,在尝试使用聚合查询获取一些数据时遇到问题。

我的拍卖模式的一部分是:

这里,fancy_number 是拍卖集合下的数组,bid_users 是每个fancy_number 下的数组。

我有 user_id,我想查询并只获取他是最高出价者的 bid_user 记录。

例如:

有 3 个用户分别出价 200,300,400,只有当这个特定用户出价为 400(最高)时,我才想获得记录(即数量和金额)。将在哪里传递 user_id

我写的聚合查询是:

不知何故,这个查询不起作用,它只给出最高出价和数量的记录。只有当他是出价最高的人时,我才想要记录。

0 投票
0 回答
18 浏览

mongoose - 在猫鼬中指定嵌套数组的类型?

我的架构

问题:它被识别为字符串。但我希望它是数字类型。

因此,模型的有效示例是:

所以我的问题是:如何指定正确的类型?

我试过[[Number]]哪个不起作用。

0 投票
1 回答
592 浏览

node.js - 将集合名称传递给猫鼬模型

我想将集合的名称从我的主 app.js 文件传递​​给它,然后在模型代码中指定它,有没有办法可以做到这一点?