更新Mongodb文档并添加字段

5

我正试图更新一个 MongoDB 文档并添加一些字段,但一直没有成功。我的初始文档如下:

 {"_id" : ObjectId("52c720e3211b6f0a258b4567"),
 "email" : "someemail@msn.com",
 "date" : ISODate("2014-01-03T20:43:15Z"),
 "number" : 0, "accessToken" : "CAAIc2knVS3oBAAWRw5iqTK6mo6BEjwJJtT8PRZBUfhLayyelcXDZBO0pTWULGNPOZAxb9ZAwWk1oQghdcqxRr5yycMvkSokU7vYn3OWQJVWFuxbHC6L6F3NvLAYCrkoPvnoZAmNZBkkvG4qXFQT46hyPrDSc7GTZA1IpxVrQHEGbrwZDZD" }

更新后,我想向文档中添加两个字段:用户名和密码。 我查阅了文档,但好像没有涵盖这方面的内容。 非常感谢。
2个回答

6

如果你正在使用Doctrine 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();

更多信息和查询构建器示例请参见:

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


我尝试了你的第一部分回答,但似乎并没有起作用,我认为它只会在名称字段存在时设置其值。 - Aysennoussi
是的,这是一个要求,该字段应在您的模式中正确声明,并生成相应的setter方法。如果由于某种原因您无法或不想这样做,请改用querybuilder。 - Calimero
字段在模式中,我的意思是:要添加的字段应该有一些值,然后您可以更新它们,但是如果它们不存在于Mongo文档中,则无法创建它们。这有意义吗? - Aysennoussi
由于这两个字段没有被持久化,我认为我应该将它们持久化,我会尝试并给您反馈。反馈:它不起作用。 - Aysennoussi
如果你想通过文档来操作它们,那么是的,你肯定需要让它们持久化 :-) 顺便说一下,这就是持久化的全部意义。如果需要进一步解释,请告诉我。 - Calimero
显示剩余3条评论

1
在Mongo shell中,您可以像这样执行此操作:

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

这将使其他字段保持不变。

非常感谢您的时间!Doctrine和Symfony2怎么样? - Aysennoussi
只需将 $set 应用于您的上下文即可。 - hgoebl
你建议我使用查询构建器吗? - Aysennoussi
实际上,您应该查看我的答案,了解关于使用Doctrine ODM实现相同查询的方法。(请记住,ODM是一个抽象层,您不能直接通过它执行查询,而是要说明您想要做什么,然后它会代表您执行查询) - Calimero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接