node.js - 在 Mongoose 中,如何在具有 .create()、.id() 和 .remove() 功能的模型中创建 MongooseArray/Collection

标签 node.js mongodb backbone.js mongoose

我的架构:

Account: mongoose.model('Account', new Schema({
    account_name: String,
    company: String,
    notes: String,
    contact_info: [this.ContactInfo]
})),
ContactInfo: mongoose.model('ContactInfo', new Schema({
    name: String,
    email: String,
    phone: String,
    notes: String 
}))

当我尝试对 contact_info 执行任何操作时,它说这些方法不存在。

var c = new ContactInfo...);
var a = new Account(...);

a.contact_info.create(c); //error, create doesn't exsit
a.contact_info.push(c); //works
a.contact_info.id(...).remove(); //id doesn't exist

我做错了什么吗?

我的完整代码在这里(不是太多):https://github.com/nycitt/node-survey-builder-api-server/blob/master/accounts.js

顺便说一句,我正在接收来自 Backbone.js 的输入

最佳答案

您的问题可能在 schemas.js 范围内。当通过文字定义对象时,this 不会引用正在定义的对象:

// ...
    contact_info: [this.ContactInfo]
// ...

它将引用文字周围的上下文 - 在 Node 模块的情况下, exports object -- 没有 ContactInfo 属性。所以,结果是:

// ...
    contact_info: [undefined]
// ...

您仍然会有一个Array,这就是push可用的原因。但是,Mongoose 不知道将其设为 MongooseDocumentArray ,因此它不会有 idcreate 等方法。

您必须在对象外部定义模型才能引用它们。另请注意顺序的变化:

var ContactInfo = mongoose.model('ContactInfo', new Schema({
    // ...
});

var Account = mongoose.model('Account', new Schema({
    // ...
    contact_info: [ContactInfo]
});

module.exports = {
    Account: Account,
    ContactInfo: ContactInfo
};

或者,将它们附加到exports,以便设置this.ContactInfo(相同顺序):

exports.ContactInfo = ...;
exports.Account = ...;

关于node.js - 在 Mongoose 中,如何在具有 .create()、.id() 和 .remove() 功能的模型中创建 MongooseArray/Collection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13956738/

相关文章:

javascript - 使用 react.js 在单页应用程序中导航

JavaScript开发和生产模式

node.js - Node.js 是这个应用程序的正确选择吗?

node.js - NodeJS - 仅 OPTIONS 请求发送到 REST API,POST 或 GET 不会遵循 (Cloudflare)

mongodb - 使用 MongoVUE 创建备份文件

logging - 如何使用 Spring Data 创建一个上限集合? - MongoDB

javascript - 谷歌云存储不一致,在可恢复上传完成后 500 毫秒返回 404

javascript - 将数据从html表单发送到mongodb数据库

mongodb - 获取 24 小时内在 sails js 中创建的记录

javascript - Backbone.js - 是否可以为模型定义多个 el 值?