2014-01-03 4 views
3

Я пытаюсь обновить MongoDB документ и добавить несколько полей, но напрасно мой первоначальный документ выглядит следующим образомОбновления документ MongoDB и добавить поля

{"_id" : ObjectId("52c720e3211b6f0a258b4567"), 
"email" : "[email protected]", 
"date" : ISODate("2014-01-03T20:43:15Z"), 
"number" : 0, "accessToken" : "CAAIc2knVS3oBAAWRw5iqTK6mo6BEjwJJtT8PRZBUfhLayyelcXDZBO0pTWULGNPOZAxb9ZAwWk1oQghdcqxRr5yycMvkSokU7vYn3OWQJVWFuxbHC6L6F3NvLAYCrkoPvnoZAmNZBkkvG4qXFQT46hyPrDSc7GTZA1IpxVrQHEGbrwZDZD" } 

После обновления, я хочу добавить 2 поля документ, который: имя пользователя и пароль. Я просмотрел документацию, но, похоже, это не относится к этому вопросу. Большое спасибо

ответ

3

Если вы работаете с доктриной ODM объекта Document:

$document->setUsername($username); // $document is your document instance 
$document->setPassword($password); 
$dm->flush($document); // $dm : document manager 

Если вы хотите автономный запрос (через QueryBuilder):

$dm->createQueryBuilder('YourBundle:YourDocumentClass') 
    ->field('_id')->Equals("52c720e3211b6f0a258b4567") 
    ->update() 
    ->field('username')->set($username) 
    ->field('password')->set($password) 
    ->getQuery()->execute(); 

Подробнее и QueryBuilder примеры здесь:

http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/query-builder-api.html

+0

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

+0

Да, это требование, поле должно быть правильно объявлено в вашей схеме и сгенерированы соответствующие методы настройки. Если по какой-то причине вы не можете или не хотите этого делать, используйте вместо этого querybuilder. – Calimero

+0

Поле находится в схеме и что я имел в виду: поля для добавления должны иметь некоторые значения, а затем обновлять их, но если они не существуют в документе mongo, они не могут быть созданы. это имеет смысл? – Sekai

1

В тех Монго оболочки вы могли бы сделать это следующим образом:

db.myusers.update(
    {_id: ObjectId("52c720e3211b6f0a258b4567")}, // identify document 
    {$set: {username: 'scott', password: 'tiger'} }) 

Это оставляет другие поля нетронутыми.

+0

Большое спасибо за ваше время! Как насчет доктрины и symfony2? – Sekai

+0

Просто примените '$ set' к вашему контексту. – hgoebl

+0

советую мне использовать querybuilder? – Sekai

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