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 的引用的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 查询过滤数组并填充相关内容

Mongoose:根据另一个集合中的值过滤集合

使用 Mongoose 将文档移动到另一个集合

Mongoose 只查找那些在另一个集合中有条目的人

如何使用另一个集合 mongoose 查找子查询文档

Mongoose聚合从另一个集合中获取多条记录中的喜欢总和