2015-09-28 5 views
0

У меня есть приложение с чатами. У каждого чата есть своя коллекция в mongodb. Наряду с другой информацией, я хочу сохранить историю чата для каждого чата в поле «сообщения».Добавить объект к объекту в коллекции mongodb

Database: myApp 
Collection: "chatroom_1" 

Например, коллекция «chatroom_coders» должны иметь:

{ 
    roomName: coders, 
    messages: { 
     0: {sentByUserID: 1, message: 'hi', chatID: 0}, 
     1: {sentByUserID: 1, message: 'hi', chatID: 1}, 
     100: {sentByUserID: 1, message: 'hi', chatID: 100}, 
    }, 
    filesShared: ['penguin.png', 'turtle.png'], 
    created_at: null, 
    updated_at: null 

} 

Тогда я хочу, чтобы получить данные, как она хранится выше. Тогда я буду манипулировать им (на моей стороне, в JS), например delete chatrooms['chatroom_coders'].messages[0], и вам нужно будет обновить коллекцию, чтобы удалить это поле.

Не уверен, как достичь того, чего я хочу, и не смог найти нужную информацию еще в Интернете. Как добавить мое сообщение в сообщения (и создать этот объект сообщений, а также) в эту конкретную коллекцию чатов? Предложения по улучшению способа хранения данных в mongodb также будут оценены.

+0

Итак ... удалить конкретное сообщение на основе индекса? (http://stackoverflow.com/questions/4588303/in-mongodb-how-do-you-remove-an-array-element-by-its-index) – tymeJV

+0

@tymeJV Первое, что мне нужно сделать, это добавить сообщение в объект сообщений конкретной коллекции чатов. – jSmith

+0

, вы, вероятно, не хотите хранить все сообщения в одном объекте mongodb. Вероятно, лучше было бы сохранить каждый объект сообщения как независимый объект. Где каждый объект сообщения имеет поле, которое ссылается на объект chatroom. – bhspencer

ответ

0

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

{ 
    roomName: coders, 
    messages_index : 100, 
    messages: { 
     0: {sentByUserID: 1, message: 'hi', chatID: 0}, 
     1: {sentByUserID: 1, message: 'hi', chatID: 1}, 
     100: {sentByUserID: 1, message: 'hi', chatID: 100}, 
    }, 
    filesShared: ['penguin.png', 'turtle.png'], 
    created_at: null, 
    updated_at: null 
} 

Вы можете обновить индекс, запрос и использовать его как ключ для нового объекта