javascript – 我应该如何正确使用popong with mongoose?

前端之家收集整理的这篇文章主要介绍了javascript – 我应该如何正确使用popong with mongoose?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在学习一些节点,并一直在尝试使用猫鼬.目前,我的目标是学习如何使用 populate.

我有项目定义和里程碑要求:

  1. projectSchema = new mongoose.Schema({
  2. id: String,title: String,description: String,owner: String,site: String,creation_date: Date,milestone_ids: Array,milestones: [{
  3. type: mongoose.Schema.Types.ObjectId,ref: "Milestone"
  4. }]
  5. })
  6.  
  7. Project = mongoose.model("Project",projectSchema)
  8. milestones = require(__dirname + "/milestones.js")();

然后我在projects.js中的某个时刻执行此操作:

  1. Project.find(query,{},{sort: {_id: -1}},function (error,results) {
  2. callback(results);
  3. }
  4. ).populate("milestones");

我如何填充里程碑?

这是来自mongo的项目数据:

  1. {
  2. "title": "sitename","description": "online thing","creation_date": {
  3. "$date": "2013-07-11T19:45:42.139Z"
  4. },"_id": {
  5. "$oid": "51df0b66dbdd7c4f14000001"
  6. },"milestones": [],"milestone_ids": [],"__v": 0
  7. }

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

  1. {
  2. "title": "Proof of concept","description": "Make it work.","due_date": {
  3. "$date": "2013-07-11T19:46:38.535Z"
  4. },"project_id": "51df0b66dbdd7c4f14000001","_id": {
  5. "$oid": "51df0b9edbdd7c4f14000002"
  6. },"__v": 0
  7. }

此外,这是里程碑架构:

  1. milestoneschema = new mongoose.Schema({
  2. id: String,due_date: Date,project_id: {
  3. type: String,ref: "Project"
  4. }
  5. })
  6.  
  7. Milestone = mongoose.model("Milestone",milestoneschema);

@R_301_323@

您需要获得定义查询选项然后执行的顺序,并且可链接的API(例如mongoose Query)无法知道在查询触发后您可能调用的其他方法.因此,当您将回调传递给.find时,mongoose会立即发送查询.

通过回调查找

>查询定义的查询
>因为回调就在那里,查询立即执行并向DB发出命令
>然后.populate发生,但它没有效果,因为查询已经发送到mongo

这是你需要做的:

  1. Project.find(query,{
  2. sort: {
  3. _id: -1
  4. }
  5. }).populate("milestones").exec(function (error,results) {
  6. callback(results);
  7. });

或者更具可读性:

  1. Project
  2. .find(query)
  3. .sort('-_id')
  4. .populate('milestones')
  5. .exec(function(error,results) {
  6. callback(results);
  7. });

省略回调并使用.exec

>传递给.find的查询创建带参数的查询对象>对.sort,.populate等的其他链式调用进一步配置查询> .exec告诉mongoose你完成了配置查询并且mongoose发出了DB命令

猜你在找的JavaScript相关文章