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
:
Person = new Schema
mother: { type: Schema.ObjectId, ref: 'Person' }
father: { type: Schema.ObjectId, ref: 'Person' }
(notice you don't need the add
call)
See the docs for populate/DBRef .
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.