如何在Mongoose中为现有模式定义嵌套对象?

Cha*_*nce 5 mongoose node.js

假设我有两个猫鼬模式:

var AccountSchema = new Schema({ 
       userName: String
     , password: String
})
var AgentSchema = new Schema({
     Name : String
   , Account: AccountSchema
})
Run Code Online (Sandbox Code Playgroud)

无论如何将AccountSchema添加到AgentSchema而不是它是一个集合?

Cha*_*nce 4

看起来不可能。两种解决方案是使用 DocumentId 或 virtuals:

对象ID:

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

var AccountSchema = new Schema({ 
       userName: String
     , password: String
})
var AgentSchema = new Schema({
     name : String
   , account: {type: ObjectId}
})
Run Code Online (Sandbox Code Playgroud)

虚拟:

var AccountSchema = new Schema({ 
       userName: String
     , password: String
})
var AgentSchema = new Schema({
     name : String
   , _accounts: [AccountSchema]
})

AgentSchema.virtual('account') 
   .set(function(account) { this._accounts[0] = account; }) 
   .get(function() { return this._accounts.first(); }); 
Run Code Online (Sandbox Code Playgroud)