在一个查询中更新父对象上的子对象

时间:2013-02-26 17:04:28

标签: mongodb

您好我在图像对象上有一组客户端,如下所示:

{
        id: 1,
        path: "2013-02/12", 
        clients:
        [
            {
                    id: 321,
                    alias: "Test: audienceDev",
            }
        ],
},

客户端对象在其他地方更新,我需要更新此图像对象上的客户端对象。

我试过了:

            $this->mongoDB->Image->update(
                array('clients.id' => (int) $document->id),
                array('$set' => array('client' => $document)),
                array('multiple' => true)
            );

            $this->mongoDB->Image->update(
                array('clients[].id' => (int) $document->id),
                array('$set' => array('client' => $document)),
                array('multiple' => true)
            );

不更新图像对象上的客户端对象。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我知道你有一组客户端,所以要更新每个客户端对象,你应该这样做:

$this->mongoDB->Image->update(
  array('clients.id' => (int) $document->id),
  array('$set' => array('clients.$' => $document)),
  array('multiple' => true)
);

这将找到具有'$ document-> id'的所有客户,并更新'clients'数组的每个客户端(。$)。

答案 1 :(得分:0)

array('$set' => array('client' => $document))

什么是客户端字段?你还没有。

要更新对象列表,您必须替换整个列表。或推新进入并拉旧。因为当您尝试通过 clients.id 条件查找文档时,您获得的是文档列表,而不是 clients 列表。 此外,您可以根据需要为更新编写js函数。并将其存储在mongodb中。