使用ObjectId的Doctrine mongodb-odm聚合构建器查询

时间:2017-03-26 16:08:41

标签: aggregation-framework doctrine-odm symfony-3.1 doctrine-mongodb

我在yml映射中有以下用户文档配置,其id字段为MongoId。我有一个用例,要求我使用聚合构建器来投影数据。当结果可用时,文档_id将作为MongoId Object返回。

有没有人知道如何在返回字符串而不是MongoId中预测_id字段?

YML中的文档映射:

UserDocument:
    fields:
        _id:
            id: true
        username:
            type: string

聚合查询:

$ab = $dm->createAggregationBuilder('UserDocument');
$ab->project()
   ->includeFields([
       'username',
   ]);
$users = $ab->execute();

结果:

{
  "_id": [],
  "username": "user"
}

由于

1 个答案:

答案 0 :(得分:0)

假设您json_encode()结果?它显示为空数组的原因是由于json_encode如何序列化对象。

如果您没有使用JMS等序列化输出,则需要手动强制该字段的类型。最简单的解决方案是迭代结果并将值设置为字符串化版本:

foreach ($results as &$v) { $v['_id'] = (string) $v['_id']; }

默认情况下,当您使用$ project运算符时,除非您将其排除,否则会包含_id字段。