【发布时间】:2017-03-28 15:13:35
【问题描述】:
我们想要更新许多文档并为一个字段设置一个数组值 [1, 2, 3]。
我们终于想出了这个解决方案:
$qb->updateMany()->field('targetGeo')->addToSet($qb->expr()->each([1,2,3]));
但是,生成的查询使 mongo 失败:
[MongoWriteConcernException] localhost:27017: The argument to $each in $addToSet must be an array but it was of type NumberLong64
调试查询给了我们:
Array (
[type] => 5
[multiple] => 1
[query] => Array
(
)
[newObj] => Array
(
[$addToSet] => Array
(
[targetGeo] => Array
(
[$each] => 1
)
)
)
)
显然,正是这个 [$each] => 1 让它失败了。
我们无法弄清楚这里出了什么问题。这是查询生成器中的错误还是我们没有正确使用它?
我们正在使用教义-mongodb 1.4 和教义-odm 1.1.3
更新:我们已经设法让它与 DocumentPersister.php 中的以下更改一起工作(请参阅为 in_array 测试添加的“$each”):
【问题讨论】:
-
你的 php 版本是多少?你可以试试
array(1,2,3)吗? -
PHP 5.6.30,切换到 array(1,2,3) 没有区别
-
请看我的更新。我们找到了一个可以让它工作的补丁。