Node.js — Налаживание отношений с Мангустом

#javascript #mongodb #node.js #mongoose

#javascript #mongodb #node.js #mongoose

Вопрос:

У меня есть 2 схемы, Custphone и Subdomain . Custphone belongs_to а Subdomain и Subdomain has_many Custphones .

Проблема заключается в создании отношений с использованием Mongoose. Моя цель — сделать: custphone.subdomain и получить поддомен, к которому принадлежит Custphone.

У меня есть это в моих схемах:

 SubdomainSchema = new Schema
    name : String

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

Когда я печатаю результат Custphone, я получаю следующее:

 { _id: 4e9bc59b01c642bf4a00002d,
  subdomain: [] }
  

Когда Custphone результат есть {"$oid": "4e9b532b01c642bf4a000003"} в MongoDB.

Я хочу custphone.subdomain создать и получить объект поддомена custphone.

Комментарии:

1. @Mike Robinson — Я хочу создать custphone.subdomain и получить объект поддомена custphone.

Ответ №1:

Похоже, вы хотите попробовать новую функциональность заполнения в Mongoose.

Используя ваш пример выше:

 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 
})
  

Комментарии:

1. Это все еще актуально для новейшей версии mongoose?

2. Спасибо. Это помогло мне с некоторыми настройками mongoose#3.8.3 .

3. Возможно, это изменилось, но run, похоже, не существует. Мне пришлось использовать .exec!

4. Я использовал это с Mongoose 4.4.12, и это все еще работает. Это работает для меня, а примеры кода в документации Mongoose — нет, хотя я новичок в Mongoose.

Ответ №2:

У меня была похожая проблема, и мне пришлось использовать модель mongoose.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