2015-03-18 2 views
0

У меня есть схемы с поддокументом как так:Mongoose - поддокумент, не может вручную заполнять/установить иое поле

User: { 
    events: [{ 
    sender: { 
     type: Schema.ObjectId, 
     ref: 'User' 
    } 
    }] 
} 

Теперь сказать, что я извлечь ребенок вспомогательного документа и у меня уже есть «отправитель» извлекается из БД, я не могу вручную установить его, вот что я имею в виду:

var sender = User.findBy.... // I retrieve the sender 
var event = user.events.id(id); // I retrieve the event by ID for the current user 

// Now I want to do this but it doesn't work 
event.sender = sender; // does not assign, it still remains an ObjectId 

Я хотел выше, в основном, чтобы сделать население себя вручную, так как это не кажется, что мангуст поддерживает заполнение одного экземпляр суб-документа (пожалуйста, исправьте меня, если Я ошибаюсь, и есть способ).

Я знаю, что он может заполнить весь массив событий, но мне просто нужно сделать это для одного экземпляра, не нужно для накладных расходов заполнять все события в массиве.

ответ

-2

Если вы хотите, чтобы заполнить его вручную просто сделать:

User.findOneById(sender, function(err, foundSender) { 
    event.sender = foundSender; 
}); 
+0

Это то, что я сделал, если вы посмотрите на мой пример выше, который не работает, назначение не будет принято объектом mongoose. –

+0

oh. редактирование одной секунды – jtmarmon

0

Для людей, имеющих один и тот же вопрос, как и я. Эта функция теперь поддерживается в mongoose 4.0.

Для тех, кто находится на 3.x или ниже, на самом деле нет подходящего альтернативного решения, но его можно частично достичь путем преобразования объекта в простой объект JSON.

Либо .toObject() или .toJSON(), а затем делает задание. Однако обратите внимание, что вы потеряете функциональность мангуста, поэтому делайте это только в том случае, если оно чисто перед возвратом клиенту.

Смежные вопросы