Показать сообщение отдельно
Старый 26.10.2015, 15:01   #24
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Чат: PHP + MySQLi или что то другое?

Добавление group_id для меня кажется сомнительной затеей, по пару причинам:
1. friends содержит больше информации чем просто друзья
2. разные места хранения group_id, что тоже не збсь
3. Возможная дупликация данных, и необходимость это все менеджить.

По этому упрости лучше себе жизнь, и в friends тупо храни список друзей.
Если проще делать, то просто храни массив ID чтобы было проще индексировать.
Если таки хочешь объект держать, то не используй массив, а используй реальный объект:
friends: {
    
friend_id: {
        
addedDate,
        
state1
    
}
}; 
friend_id - реальный ID друга.
Но все равно тебе прийдется иметь отдельно массив со списком всех ID в нем для индексации, т.к. индексировать key'и объекта нельзя.
В итоге дополнительное поле будет:
friend_ids: [ friend_id_1friend_id_2 ]; 
Когда у тебя будет такой формат данных, тебе будет в разы проще обновлять какие-то данные конкретного друга, либо удалить его сразу.

Ты изначально себе усложнил задачу используя массив.

Также не храни там group_id, храни их в одной коллекции отдельно, чтобы было в разы проще оперировать этим делом.

Обновить стейт друга 64 у пользователя 32:
db.users.update({
    
_id32
}, {
    
$set: {
        
'friends.64.state'0
    
}
}); 
Удалить друга:
db.users.update({
    
_id32
}, {
    
$unset: {
        
'friends.64'1
    
},
    
$pull: {
        
'friend_ids'64
    
}
}); 
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
St_AnGer (26.10.2015)