Mongoose存储另一个集合的ObjectId的Refs

时间:2016-11-03 07:18:06

标签: node.js mongodb mongoose

我有两个收藏品“人物”和“故事”。 Stories Model有一个名为restricted的字段。我需要存储不受人物模式限制的故事的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

中要写的内容

1 个答案:

答案 0 :(得分:1)

您可以先获取不受限制的故事的不同ID列表,然后使用 distinct() 命令执行此操作。

当您获得ID列表时,您可以使用 findByIdAndUpdate() findOneAndUpdate() update()

以下是一个例子:

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));
        }
    )
})