如何将数组 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 引用到另一个集合的主要内容,如果未能解决你的问题,请参考以下文章

通过包括子数组在内的参数进行Mongoose查找。

Meteor:你如何用 _id 字段将一个集合中的字段填充到另一个集合中?

Meteor:你如何用 _id 字段将一个集合中的字段填充到另一个集合中?

如何将 id 数组作为字符串连接和查询到另一个表中?

如何将数组值从一个数组移动到另一个数组

如何将存储在引用表中的引用值插入到另一个表中?