azaliya 26.03.2012 07:46 QIP

Помогите решить такую проблему: есть записи данных пользователей в базе mongo сорта (_id, username, fullname, password, email). Username и password — обязательные поля, это значит что в базе они будут обязательно заполнены. Но при этом fullname и email могут быть пустыми (т.е. в базе в конкретных записях их может не быть). Есть форма редактирования такого пользователя. На этой форме сразу заполнено поле username (оно берется текущее из базы), и, если они есть в базе, поля fullname и email. На этой форме пользователь может поменять значение любого(!) поля. Поле password должно остаться пустым, если пользователь не хочет редактировать текущий пароль. Как обновить (обновляю по _id) запись пользователя в базе таким образом, чтобы поменялись (добавились в базу) только заполненные поля, а нетронутые остались на месте (например, пароль остался прежним, или поля email у этого пользователя пустое). Поле username уникально в базе.

1. d1ffuz0r 26.03.2012 07:51

в питоне так
post = mycollection.find_one({"_id":mongo_id})
post['newfield'] = "abc"
mycollection.save(post)

возможно есть что то подобное и в пхп

2. arts 26.03.2012 07:54

В чём проблема-то?
var user = db.users.find({username: 'user1'});
user.fullname = 'blablable';
...
user.save();

3. azaliyaarts /2 26.03.2012 08:04 QIP

Такая конструкция в php не работает.

4. azaliyad1ffuz0r /1 26.03.2012 08:05 QIP

Да наверно ж есть, но то ли я неправильно понимаю команду update вообще, то ли я снова сделала что-то не так.

5. d1ffuz0razaliya /3 26.03.2012 08:05

потому что это js, ваш кэп

6. azaliyad1ffuz0r /5 26.03.2012 08:07 QIP

Во-первых я поставила тег php (наверно это о чем-то говорит), во-вторых повторяю — подобное в php не работает.

7. d1ffuz0razaliya /6 26.03.2012 08:09

нет слов

8. azaliyad1ffuz0r /7 26.03.2012 08:10 QIP

Нет слов, не пиши комментарий. Я попросила помочь, а не фыркать. Перепробовала множество средств, возможно что-то не учла.

9. d1ffuz0razaliya /8 26.03.2012 08:13

http://habrahabr.ru/post/103699/
$criteria = array(

'name' => 'eggs',

);

$doc = $collection→findOne($criteria);

// update document with new values

// save back to collection

$doc['name'] = 'apples';

$doc['quantity'] = 35;

$doc['note'] = 'green apples taste sooooo good!';

$collection→save($doc);

10. d1ffuz0rd1ffuz0r /9 26.03.2012 08:13

вот только гугл видимо не попробовала

11. azaliyad1ffuz0r /10 26.03.2012 08:15 QIP

Пробовала, но то, что написано, у меня все равно не работает. О_о Буду искать причину где-то еще. Спасибо за помощь!

12. artsazaliya /3 26.03.2012 08:21

Этот код работает в монговском шелле. Я показал принцип. Перевести это на похапе уже твоя задача. На похапе я не пишу принципиально, поэтому с тамошним монговским api не знаком.

Do you really want to delete ?