Mongoose 存储另一个集合的 ObjectId 的引用
Posted
技术标签:
【中文标题】Mongoose 存储另一个集合的 ObjectId 的引用【英文标题】:Mongoose Storing Refs of ObjectId of another collection 【发布时间】:2017-03-16 16:51:04 【问题描述】:我有两个集合“Person”和“Stories”。故事模型有一个称为受限的字段。我需要存储不受人员模式限制的故事的 ObjectId。通常显示该人可用的故事。
person.model.js
var mongoose = require('mongoose'), Schema = mongoose.Schema;
var personSchema = Schema(
name : String,
stories : [ type: Schema.Types.ObjectId, ref: 'Story' ]
);
var Person = mongoose.model('Person', personSchema);
story.model.js
var mongoose = require('mongoose'), Schema = mongoose.Schema; var
storySchema = Schema(
creator : String,
title : String,
restrictions : Boolean
);
var Story = mongoose.model('Story', storySchema);
我完全是新人。请帮我在 person.controller.js
中找到要写的内容【问题讨论】:
“帮帮我”通常不会在这里得到任何答复。提出您遇到问题的具体问题并展示初步努力。 需要在人物模型中存储故事的对象ID。除了帮助我,我认为我的问题很清楚 请参阅How to Ask 和minimal reproducible example。 【参考方案1】:您可以首先获取不受限制的故事的不同 ID 的列表,您可以使用 distinct()
命令执行此操作。
当您获得 id 列表后,您可以使用 findByIdAndUpdate()
或 findOneAndUpdate()
或 @987654324 使用该列表更新 Person 模型的故事字段@。
一个例子如下:
Story.distinct("_id", "restrictions": false ).exec(function(err, stories)
if (err) throw err;
Person.findByIdAndUpdate(personId,
"$addToSet": "stories": "$each": stories ,
"new": true ,
function(err, person)
if (err) throw err;
console.log(JSON.stringify(person.stories, null, 4));
)
)
【讨论】:
是否引用了在 mongo 中存储数据的坏方法? 这取决于您的应用程序设计,是一个相当广泛的主题。有关 MongoDB 中数据建模的更多详细信息,请阅读文档Data Modeling Introduction,尤其是Model One-to-Many Relationships with Embedded Documents。除此之外,以上答案是否解决了您的问题?以上是关于Mongoose 存储另一个集合的 ObjectId 的引用的主要内容,如果未能解决你的问题,请参考以下文章