I have 2 Schemas, Custphone
and Subdomain
. Custphone
belongs_to
a Subdomain
and Subdomain
has_many
Custphones
.
The problem is in creating the relationship using Mongoose. My goal is to do: custphone.subdomain and get the Subdomain that the Custphone belongs to.
I have this in my schemas:
SubdomainSchema = new Schema name : String CustphoneSchema = new Schema phone : String subdomain : [SubdomainSchema]
When I print the Custphone result I get this:
{ _id: 4e9bc59b01c642bf4a00002d, subdomain: [] }
When the Custphone
result has {"$oid": "4e9b532b01c642bf4a000003"}
in MongoDB.
I want to do custphone.subdomain
and get the subdomain object of the custphone.
To model relationships between connected data, you can reference a document or embed it in another document as a sub document. Referencing a document does not create a “real” relationship between these two documents as does with a relational database. Referencing documents is also known as normalization.
Mongoose is designed in such a way that you can model your tables relationally with relative ease and populate relational data based on the ref you defined in the schema.
It's not mandatory to use Mongoose over the MongoDB Native API. However, there are some benefits to doing so.
It sounds like you're looking to try the new populate functionality in Mongoose.
Using your example above:
var Schema = mongoose.Schema, ObjectId = Schema.ObjectId; SubdomainSchema = new Schema name : String CustphoneSchema = new Schema phone : String subdomain : { type: ObjectId, ref: 'SubdomainSchema' }
The subdomain
field will be is updated with an '_id' such as:
var newSubdomain = new SubdomainSchema({name: 'Example Domain'}) newSubdomain.save() var newCustphone = new CustphoneSchema({phone: '123-456-7890', subdomain: newSubdomain._id}) newCustphone.save()
To actually get data from the subdomain
field you're going to have to use the slightly more complex query syntax:
CustphoneSchema.findOne({}).populate('subdomain').exec(function(err, custPhone) { // Your callback code where you can access subdomain directly through custPhone.subdomain.name })
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With