Node.js - 使用 Mongoose 创建关系

Posted

技术标签:

【中文标题】Node.js - 使用 Mongoose 创建关系【英文标题】:Node.js - Creating Relationships with Mongoose 【发布时间】:2011-12-10 06:52:37 【问题描述】:

我有 2 个架构,CustphoneSubdomainCustphonebelongs_toSubdomainSubdomainhas_manyCustphones

问题在于使用 Mongoose 创建关系。我的目标是: custphone.subdomain 并获取 Custphone 所属的子域。

我的架构中有这个:

SubdomainSchema = new Schema
    name : String

CustphoneSchema = new Schema
    phone : String
    subdomain  : [SubdomainSchema]

当我打印 Custphone 结果时,我得到:

 _id: 4e9bc59b01c642bf4a00002d,
  subdomain: [] 

Custphone 结果在 MongoDB 中有 "$oid": "4e9b532b01c642bf4a000003" 时。

我想做custphone.subdomain并获取custphone的子域对象。

【问题讨论】:

@Mike Robinson - 我想做 custphone.subdomain 并获取 custphone 的子域对象。 【参考方案1】:

听起来您正在寻找在 Mongoose 中尝试新的 populate 功能。

使用上面的示例:

var Schema = mongoose.Schema,
    ObjectId = Schema.ObjectId;

SubdomainSchema = new Schema
    name : String

CustphoneSchema = new Schema
    phone : String
    subdomain  :  type: ObjectId, ref: 'SubdomainSchema' 

subdomain 字段将更新为“_id”,例如:

var newSubdomain = new SubdomainSchema(name: 'Example Domain')
newSubdomain.save()

var newCustphone = new CustphoneSchema(phone: '123-456-7890', subdomain: newSubdomain._id)
newCustphone.save()

要真正从 subdomain 字段中获取数据,您将不得不使用稍微复杂的查询语法:

CustphoneSchema.findOne().populate('subdomain').exec(function(err, custPhone)  
// Your callback code where you can access subdomain directly through custPhone.subdomain.name 
)

【讨论】:

这对最新版本的猫鼬仍然有效吗? 谢谢。这有助于我使用mongoose#3.8.3 进行一些配置。 也许它已经改变了,但运行似乎不存在。我必须使用 .exec! 我在 Mongoose 4.4.12 中使用了它,它仍然有效。这适用于我,Mongoose documentation 中的代码示例不适用,尽管我是 Mongoose 的新手。【参考方案2】:

我遇到了类似的问题,不得不使用猫鼬的 Model.findByIdAndUpdate()

文档:http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate

这篇文章也帮助了我:http://blog.ocliw.com/2012/11/25/mongoose-add-to-an-existing-array/comment-page-1/#comment-17812

【讨论】:

以上是关于Node.js - 使用 Mongoose 创建关系的主要内容,如果未能解决你的问题,请参考以下文章

创建 Schema Mongoose (Node.js) 模型以简化代码

Node.js Mongoose 使用 bcrypt 登录

无法使用 Node.js Express MongoDB Mongoose CoffeeScript 发布

Node.js 无法使用 Promise、Mongoose 和 GET 请求推送到全局数组

Node.js Mongoose Promise 迷路了

Node.js + Mongoose 可以在本地工作,但不能在 Heroku 上工作