【问题标题】:Update a Mongodb document and add fields更新一个 MongoDB 文档并添加字段
【发布时间】:2014-01-03 21:00:48
【问题描述】:

我正在尝试更新 mongodb 文档并添加一些字段但徒劳无功 我的初始文档是这样的

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

更新后,我想在文档中添加两个字段:用户名和密码。 我查看了文档,但似乎没有处理这个问题。 非常感谢

【问题讨论】:

    标签: mongodb symfony doctrine-orm


    【解决方案1】:

    如果您使用的是原则 ODM 文档对象:

    $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

    【讨论】:

    • 我尝试了你的第一部分答案,但它似乎不起作用,我认为它设置了 name 字段的值(如果确实存在)。
    • 是的,这是一个要求,该字段应在您的架构中正确声明并生成相应的 setter 方法。如果由于某种原因您不能或不想这样做,请改用查询构建器。
    • 该字段在架构中,我的意思是:要添加的字段应该有一些值,然后您更新它们,但如果它们在 mongo 文档中不存在,则无法创建它们.这有意义吗?
    • 由于这两个字段都没有被持久化,我觉得我应该持久化它们,我会尝试并给你我的反馈反馈:它不起作用
    • 如果你想通过文档来操作它们,那么是的,你肯定需要让它们持久化 :-) 顺便说一句,这就是持久化的意义所在。如果我能进一步澄清,请告诉我。
    【解决方案2】:

    在 mongo shell 中你可以这样做:

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

    这使得其他领域保持不变。

    【讨论】:

    • 非常感谢您的宝贵时间!教义和 symfony2 怎么样?
    • 只需将$set 应用到您的上下文中。
    • 你建议我使用 querybuilder 吗?
    • 实际上,您应该查看我对同一查询的学说 ODM 实现的回答。 (请记住,ODM 是一个抽象层,您不会直接通过它执行查询,而是说明您想要做什么,它会代表您执行查询)
    猜你喜欢
    • 2012-10-27
    • 2012-02-20
    • 1970-01-01
    • 2011-12-04
    • 2017-05-28
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多