Сообщение от moka
Обновить стейт друга 64 у пользователя 32:
db.users.update({ _id: 32 }, { $set: { 'friends.64.state': 0 } });
Удалить друга:
db.users.update({ _id: 32 }, { $unset: { 'friends.64': 1 }, $pull: { 'friend_ids': 64 } });
|
Как это сделать в БД я понял, а как мне в скрипте обратиться к тому же другу 64, если я знаю только переменную содержащую это значение? Ну то есть, я руками вставил друга 64, а дальше?
friend = 64; //64 нам пришло из POST запроса.
db.collection('users', function(err, collection){
collection.find({_id:owner}).toArray(function(err, results){
if (results[0].friends.friend) {
...
}
});
});
results[0].friends.friend естественно не может найти поля friend.
А обратиться так надо кровь из носу.
И вставлять как? Вставка в массив происходила до безобразия просто $push-ем:
collection.update({_id:owner}, {$push:{friends:{_id:friend, group_id:0,state:1,add_date:addDate}}});
Как же быть с объектом?
И ещё - тип "объект" в данном случае будет эквивалентен типу "документ"?
АПД с созданием объекта я протупил что то. Объект в js этож как ассоциативный массив:
Надо иногда отдыхать...
Остался вопрос грамотной вставки нового друга в базу. И вопрос доступа. Я же владею только переменной id-друга которая пришла в запросе, надо как то собрать в этом вот куске
collection.update({_id:owner}, {$set:{'friends.64.state':0}});
строку 'friends.64.state' имея переменную friend = 64. Пока что не пойму как.