Based on this example (which works):
var Comment = new Schema();
Comment.add({
title : { type: String, index: true }
, date : Date
, body : String
, comments : [Comment]
});
I wanted to create a CoffeeScript version
mongoose = require 'mongoose'
Schema = mongoose.Schema
Person = new Schema
Person.add
mother: Person
father: Person
However it returns an error and I don't understand why
TypeError: undefined is not a function
at CALL_NON_FUNCTION_AS_CONSTRUCTOR (native)
at Function.interpretAsType (/path/node_modules/mongoose/lib/schema.js:202:10)
at Schema.path (/path/node_modules/mongoose/lib/schema.js:162:29)
at Schema.add (/path/node_modules/mongoose/lib/schema.js:110:12)
at Object.<anonymous> (/path/Models/test.coffee:6:10)
at Object.<anonymous> (/path/Models/test.coffee:10:4)
at Module._compile (module.js:411:26)
at Object.run (/usr/local/lib/node_modules/coffee-script/lib/coffee-script.js:57:25)
at /usr/local/lib/node_modules/coffee-script/lib/command.js:147:29
at /usr/local/lib/node_modules/coffee-script/lib/command.js:115:26
EDIT: Okay, I found out that it doesn't work when Person isn't an array (in brackets), but why?
Embedded documents can only exist as items in an array. That is by design, you can ask the authors for their reasons :)
You might want to use a
DBRef
:(notice you don't need the
add
call)See the docs for populate/DBRef.