Mongoose.js 在模式中存储未知对象

Tre*_*tto 5 object populate mongoose mongodb node.js

我正在创建一种对话应用程序,我希望用户能够通过电子邮件和短信从任何地方继续他们的对话。现在我有一个这样的对话模式:

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

var ConversationSchema = new Schema({
    contact: [
        { 
            type: Schema.Types.ObjectId,
            ref: 'Contact'
        }
    ],
    conversation: {

    }
});

var Conversation = mongoose.model('Conversation', ConversationSchema);
Run Code Online (Sandbox Code Playgroud)

在对话对象中,我希望能够存储一个Email或一个对象。SMS不知道SMS对话对象中有多少个电子邮件或多少个,也不知道它们到达的顺序。当我查询对话并显示它时,我想填充所有的 和Email对象SMS

如何确保conversation可以容纳不同类型的对象,并且在请求对话时可以填充每个对象?

有更好的方法来实现这一点吗?我可以想象填充每个对象的效率会非常低。

小智 0

对于您的情况,您最好使用数组进行对话,例如:

conversation: {
    sms: [],
    email: []
}
Run Code Online (Sandbox Code Playgroud)

或者,如果你输入[Schema.Types.Mixed]类型,你将能够在里面保存任何类型的对象。