【问题标题】:How can I store data other than ObjectId using Mongoose populate?如何使用 Mongoose 填充存储 ObjectId 以外的数据?
【发布时间】:2012-05-26 02:00:42
【问题描述】:

以这里为例

http://mongoosejs.com/docs/populate.html

如果我尝试调整它以使“粉丝”也包含评分

var db = require('houselib/db');
var Schema = db.Schema;
var mongoose = db.mongoose;

var PersonSchema = new Schema({
    name    : String
    , age     : Number
    , stories : [{ type: Schema.ObjectId, ref: 'Story' }]
});

var StorySchema = new Schema({
    _creator : { type: Schema.ObjectId, ref: 'Person' }
    , title    : String
    , fans     : [{ type: Schema.ObjectId, ref: 'Person', rating: Number}]
});

var Story  = mongoose.model('Story', StorySchema);
var Person = mongoose.model('Person', PersonSchema);

var aaron = new Person({ name: 'Aaron', age: 100 });

aaron.save(function (err) {
    if (err) throw err;

  var story1 = new Story({
      title: "A man who cooked Nintendo"
    , _creator: aaron._id
    , fans: [{type: aaron._id, rating: 4}]
  });

  story1.save(function (err) {
    if (err) throw err;
        Story
        .find({ _creator: aaron._id })
        .populate('_creator') // <-- not really necessary
        .run(function (err, stories) {
            if (err) throw err;
            console.log('The stories JSON is an array: ', stories);
        })
  });

})

我收到以下错误

CastError: Cast to undefined failed for value "[object Object]"

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    【讨论】:

    【解决方案2】:

    story.fans 是一个 objectid 数组。 objectids 不能有评级。您需要将评分添加到 Person 架构而不是故事架构。

    var PersonSchema = new Schema({
        name    : String
        , age     : Number
        , rating: Number
        , stories : [{ type: Schema.ObjectId, ref: 'Story' }]
    });
    

    【讨论】:

    • 但是一个人没有评分。粉丝给特定故事打分。我认为 DBRef 不是正确的方法,手动链接是要走的路
    猜你喜欢
    • 2021-03-03
    • 2017-04-20
    • 2021-08-25
    • 2017-11-22
    • 2021-01-02
    • 1970-01-01
    • 2017-11-05
    • 2020-11-03
    • 1970-01-01
    相关资源
    最近更新 更多