【问题标题】:How to avoid duplicated objects in Mongo array如何避免Mongo数组中的重复对象
【发布时间】:2019-06-10 10:11:34
【问题描述】:

我正在尝试创建任务集合,其中每个用户都有自己的对象,并且他的任务分为不同的日子。不幸的是,当我尝试为现有日期添加新任务时,mongo 复制了 day 对象。我为 Symfony 使用 facile-it/mongodb-bundle

这是我的代码:

$collection = $this->mongoConnection->selectCollection(Table::READ_MONGO_USER_TASKS);

if($collection->countDocuments(['user_id' => $userId->toString()]) === 0) {
    $this->createUserDocument($collection, $userId);
}

$task = [
    'id' => $event->taskId()->toString(),
    'title' => $event->title()
];

$collection->updateOne(
    [
        'user_id' => $userId->toString()
    ],
    [
        '$addToSet' => [
            'days' => [
                'date' => $deadlineDate,
                'tasks_list' => [$task]
            ]
        ]
    ]
);

当同一天有 2 个或更多任务时,我会收到如下信息: compass view

我应该怎么做才能使其按预期工作?

【问题讨论】:

  • addToSet 将唯一项添加到数组中。在您的情况下,“项目”是日期和任务列表的组合。不仅仅是日期。

标签: php mongodb symfony


【解决方案1】:

如果要为现有日期添加新任务,则应在查询的第一个参数中传递日期,而不是在第二个参数中。您将使用特定的 user_id 和日期更新集合。 像这样的

[
    'user_id'   => $userId->toString(),
    'days.date' => $deadLineDate
]

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 2015-02-05
    • 2012-05-25
    • 1970-01-01
    • 2023-02-01
    相关资源
    最近更新 更多