如何将数组 id 引用到另一个集合
Posted
技术标签:
【中文标题】如何将数组 id 引用到另一个集合【英文标题】:How to reference array id to another collection 【发布时间】:2017-03-13 08:13:43 【问题描述】:我有一个集合作为设备,另一个作为调度程序。设备包含作为数组的设备,现在每个设备都有对象 ID,我想在名为 Schedulers 的新架构中将其用作引用。
这就是我要问的:
var SchedulerSchema = new Schema( applianceId:
type: Schema.ObjectId,
ref: 'Device.appliances'
);
如果我需要链接设备字段,它是我的设备集合中的一个数组,应该是什么。
【问题讨论】:
【参考方案1】:一个关于如何参考的小例子。
填充是自动将文档中的指定路径替换为其他集合中的文档的过程。我们可以填充单个文档、多个文档、普通对象、多个普通对象或从查询返回的所有对象。让我们看一些例子。
var mongoose = require('mongoose')
, Schema = mongoose.Schema
var personSchema = Schema(
_id : Number,
name : String,
age : Number,
stories : [ type: Schema.Types.ObjectId, ref: 'Story' ]
);
var storySchema = Schema(
_creator : type: Number, ref: 'Person' ,
title : String,
fans : [ type: Number, ref: 'Person' ]
);
var Story = mongoose.model('Story', storySchema);
var Person = mongoose.model('Person', personSchema);
到目前为止,我们已经创建了两个模型。我们的 Person 模型将它的 stories 字段设置为 ObjectIds 数组。 ref 选项告诉 Mongoose 在填充过程中使用哪个模型,在我们的例子中是 Story 模型。我们在这里存储的所有 _id 都必须是来自 Story 模型的文档 _id。我们还将 Story _creator 属性声明为 Number,与 personSchema 中使用的 _id 类型相同。将 _id 的类型与 ref 的类型匹配很重要。
注意: ObjectId、Number、String和Buffer都可以作为refs使用。
通过链接了解更多信息:http://mongoosejs.com/docs/populate.html
【讨论】:
这不提供问题的答案 是的,这个例子展示了一个可以从提问者那里得到的解决方案。我们应该为他们做编码还是展示一个可行的方向? 我认为他问的是如何引用数组中的项目,而不是创建引用另一个模型的属性以上是关于如何将数组 id 引用到另一个集合的主要内容,如果未能解决你的问题,请参考以下文章
Meteor:你如何用 _id 字段将一个集合中的字段填充到另一个集合中?