gpt4 book ai didi

javascript - 我应该如何正确使用 Mongoose 填充?

转载 作者:数据小太阳 更新时间:2023-10-29 05:02:40 26 4
gpt4 key购买 nike

我正在学习一些 Node 并且一直在尝试使用 Mongoose 。目前,我的目标是学习如何使用 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");

如何填充里程碑?


这是来自 mongo 的 project 数据:

{
"title": "sitename",
"description": "online thing",
"creation_date": {
"$date": "2013-07-11T19:45:42.139Z"
},
"_id": {
"$oid": "51df0b66dbdd7c4f14000001"
},
"milestones": [],
"milestone_ids": [],
"__v": 0
}

而这个是与项目基本相关的里程碑:

{
"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);

最佳答案

您需要获得定义查询选项然后执行的正确顺序,而诸如 mongoose Query 之类的可链接 API 无法知道您可能会在查询触发后调用哪些其他方法。因此,当您将回调传递给 .find 时,mongoose 会立即发送查询。

将回调传递给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 告诉 mongoose 您已完成查询配置,mongoose 发出 DB 命令

关于javascript - 我应该如何正确使用 Mongoose 填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17598712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com