8

I am trying to build comment model contains: Reply and CommentThread. CommentThread contains Reply, and Reply can recurse itself.

/models/comment.js :

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var replySchema = new Schema({
  username: String,
  timestamp: { type: Date, default: Date.now },
  body: String,
  replies: [replySchema]
}, {_id: true});

var commentThreadSchema = new Schema({
  title: String,
  replies: [replySchema]
});

var Reply = mongoose.model('Reply', replySchema);
var CommentThread = mongoose.model('CommentThread', commentThreadSchema);

module.exports = {
    Reply: Reply,
    CommentThread: CommentThread
};

My error message is : Invalid value for schema Array path 'replies'. Can't replySchema use itself as value type ? Or some other reasons?

c:\Users\jacki_000\projects\invictusblog\node_modules\mongoose\lib\schema.js:297

      throw new TypeError('Invalid value for schema Array path `'+ prefix + ke
            ^
TypeError: Invalid value for schema Array path `replies`
    at Schema.add (c:\Users\jacki_000\projects\invictusblog\node_modules\mongoos
e\lib\schema.js:297:13)
    at new Schema (c:\Users\jacki_000\projects\invictusblog\node_modules\mongoos
e\lib\schema.js:87:10)
    at Object.<anonymous> (c:\Users\jacki_000\projects\invictusblog\models\comme
nt.js:4:19)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (c:\Users\jacki_000\projects\invictusblog\services\com
ment-service.js:1:83)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
invictus
  • 93
  • 1
  • 2
  • 8

2 Answers2

16

https://searchcode.com/codesearch/view/6134527/

see the example above, you need to do something like

var replySchema = new Schema();
replyschema.add({
  username: String,
  timestamp: { type: Date, default: Date.now },
  body: String,
  replies: [replySchema]
});
Dasith
  • 1,085
  • 10
  • 16
  • 1
    Thanks. It works. Is it because before using replySchema, it should be defined? – invictus Jun 16 '15 at 18:14
  • 1
    Thanks, Had the same issue when migrating from an older version of mongoose. Issue was how the schema was being defined. The `.add` worked nicely. – jmunsch Oct 14 '15 at 16:33
0

run

npm install mongoose@3.8.5

for a quick fix

Rishabh Agrawal
  • 1,998
  • 2
  • 25
  • 40