2012-05-24 2 views
1

Я разрабатываю web-узел node.js + mongoose, и у меня есть одно сомнение в создании базы данных. Это как определяется база данных:Узел js + Mongo db design

var user = new Schema({ 
id : ObjectId, 
name : String, 
password : String, 
email : String, 
created : Date 
}); 
var comment = new Schema({ 
id : ObjectId, 
userId: ObjectId, 
content : String, 
created : Date 
}) 

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

userId: ObjectId, 

или:

userObject: user 

Спасибо!

Надеюсь, вы можете мне помочь!

ответ

1

Ну, это зависит. На ваш вопрос нет окончательного ответа. Как правило, я бы посоветовал вам не использовать родные ссылки на поле MongoDB, которые имеют небольшие накладные расходы.

Для всех моих проектов я бы выбрал первое решение, которое, как правило, гораздо более гибкое и сэкономит вам место на диске. В коже нужно сделать еще один запрос.

+0

Итак, когда я хочу найти все комментарии от одного пользователя ... Это должно быть сделано как ... db.Comment.find ({userId: ObjectId ("whatever")}) ?? –

+1

Да. Определенно, что я буду делать. 'db.Comment.find(). где ('userId', 'whatever')' больше глазного сахара, через. Если это функция, которую вы часто используете, я настоятельно рекомендую вам сделать это [Model method] (http://mongoosejs.com/docs/methods-statics.html), чтобы вы могли вызвать, например, 'db .User.findComments (...) ', или' db.Comments.findByUser (...) '. – Pierre

+0

Mongoose также [поддерживает 'populate'] (http://mongoosejs.com/docs/populate.html), который может выполнить дополнительный запрос для вас. –

0

Простая структура данных для этого случая использует то, что звонит мангуста embedded documents.

Как упоминал Брэндон Тилли, вы можете также взглянуть на поведение DBRef и populate функциональность мангуста. Это позволит вам обрабатывать объект Notes как отдельный независимый объект. Недостатком является то, что если у вас есть экземпляр комментария и вы хотите получить доступ к атрибутам пользователя, сначала необходимо заполнить ссылку на пользователя.

В конце концов, это зависит от вашего варианта использования и того, как вы предпочитаете использовать свою информацию. Я говорю, не думайте слишком много об этом и попробуйте любой. Если позже вы решите, что другая структура работает лучше всего, просто измените ее. К счастью, это очень просто с MongoDB и NoSQL в целом.

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