我正在学习一些节点,并一直尝试使用猫鼬。目前,我的目标是学习如何使用populate。
我有一个projects
定义,并milestone
要求:
projectSchema = new mongoose.Schema({
id: String,
title: String,
description: String,
owner: String,
site: String,
creation_date: Date,
milestone_ids: Array,
milestones: [{
type: mongoose.Schema.Types.ObjectId,
ref: "Milestone"
}]
})
Project = mongoose.model("Project", projectSchema)
milestones = require(__dirname + "/milestones.js")();
然后我在某个时候执行此操作projects.js
:
Project.find(query, {}, {sort: {_id: -1}},
function (error, results) {
callback(results);
}
).populate("milestones");
如何填充里程碑?
这是project
来自mongo 的数据:
{
"title": "sitename",
"description": "online thing",
"creation_date": {
"$date": "2013-07-11T19:45:42.139Z"
},
"_id": {
"$oid": "51df0b66dbdd7c4f14000001"
},
"milestones": [],
"milestone_ids": [],
"__v": 0
}
这milestone
是基本上与项目相关的一个:
{
"title": "Proof of concept",
"description": "Make it work.",
"due_date": {
"$date": "2013-07-11T19:46:38.535Z"
},
"project_id": "51df0b66dbdd7c4f14000001",
"_id": {
"$oid": "51df0b9edbdd7c4f14000002"
},
"__v": 0
}
另外,这是里程碑模式:
milestoneschema = new mongoose.Schema({
id: String,
title: String,
description: String,
owner: String,
site: String,
due_date: Date,
project_id: {
type: String,
ref: "Project"
}
})
Milestone = mongoose.model("Milestone", milestoneschema);
您需要获得定义查询选项然后执行的顺序,并且可链接的API(例如mongoose
Query)不知道在查询触发后您可能会调用哪些其他方法。因此,当您将回调传递给时.find
,猫鼬会立即发送查询。
find
.populate
发生,但是没有任何效果,因为查询已经发送到mongo这是您需要做的:
Project.find(query, {}, {
sort: {
_id: -1
}
}).populate("milestones").exec(function (error, results) {
callback(results);
});
或者更具可读性:
Project
.find(query)
.sort('-_id')
.populate('milestones')
.exec(function(error, results) {
callback(results);
});
.exec
.find
创建 带有参数的查询对象.sort
,.populate
等等进一步配置了查询.exec
告诉猫鼬您已完成配置查询,猫鼬发出了DB命令问题内容: 我正在将node.js的猫鼬模式与express-validator(具有node-validator santiziations和Validator)一起使用。 存储商品价格的好方法是什么? 我目前有 价格是可选的,所以我有: express-validator给了我isNumeric(允许0填充),isDecimal和isInt …我宁愿只是将其转换为十进制并去除所有字符,所以我总
问题内容: 我将MongoDB和Mongoose用作我的ODM,并且试图在同一条语句中使用和进行查询。 这是我的简单文档模型: 我只是想获取一个用户的每条消息,并按与他交谈的每个用户分组。我这样尝试过: 但是,不幸的是,我的模型没有方法。您有什么解决方案可以使它正常工作吗? 谢谢。 问题答案: 使用$ lookup的示例填充,lookup填充为数组,因此$ unwind。
问题内容: 我有以下架构(在咖啡脚本中表示歉意) 我只想恢复一条肯定在我的数据库中的记录: 不幸的是,这总是记录下来。在mongo shell中总是返回一个值。到底是怎么回事? 问题答案: 发现问题,需要改用:
问题内容: 我无法手动或自动在新保存的对象上填充创建者字段……我能找到的唯一方法是重新查询我已经想要做的对象。 这是设置: 这是我拉头发的地方 编辑:最新的猫鼬解决了此问题并添加了填充功能,请参见新的接受的答案。 问题答案: 您应该能够使用模型的填充函数来执行此操作:http : //mongoosejs.com/docs/api.html#model_Model.populate 在书籍的保存处
问题内容: 我使用Mongoose.js,无法解决3级层次结构文档的问题。 有2种方法可以做到。 首先 -没有裁判。 我需要出示C记录。仅知道_id的C,如何填充/找到它? 我曾尝试使用: 但是我不知道如何从returnet得到一个对象,我只需要c对象。 其次, 如果使用裁判: 如何填充所有B,C记录以获取层次结构? 我试图使用这样的东西: 但是它将为single_c.title返回undefin
我在nodeJs服务器中使用mongoose(4.13.10)连接到mongodb实例 我使用游标来迭代我的数据库的记录,并对数据库进行多次查询,这需要很多时间,因此我得到游标未找到异常。我发现这些发生是由于游标的空闲超时,符合我的观察。 现在,我不想将标记为true,而是将超时设置为某个高值,通过该值,我确信长时间运行的查询将完成。但我无法找到任何留档或指导如何设置服务器参数。 如何设置此参数?