gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:23 25 4
gpt4 key购买 nike

我的架构:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com