我有一个mongo文档,例如:
{
["_id"]=>
object(MongoId)#7 (1) {
["$id"]=>
string(24) "506f54886801cae34212c1a2"
}
["hhid"]=>
array(2) {
[0]=>
int(210854544)
[1]=>
int(308789420)
}
["seg"]=>
array(4) {
[0]=>
int(71)
[1]=>
int(91)
[2]=>
int(35)
[3]=>
int(64)
}
}
我想要做的是更新seg
数组(添加另一个条目),其中hhid
具有特定元素。
我试过了:
$collection->update(
array('hhid' => '226304795'),
array('$addToSet' => array("seg" => "8")));
期望seg数组现在具有:
["seg"]=> array(5) { [0]=> int(71) [1]=> int(91) [2]=> int(35) [3]=> int(64) [4]=> int(8) }
然而没有任何反应。我理解hhid
是一个数组,但我不认为标准是正确的。
任何帮助都将不胜感激。
答案 0 :(得分:0)
我看到你用一个引号括起一个变量;这样PHP就可以从字面上解释它。请尝试从'$addToSet'
删除单引号。
答案 1 :(得分:0)
我相信您正在string
进行搜索,因为您希望按int
进行搜索,因为您的文档显示:
["hhid"]=>
array(2) {
[0]=>int(210854544)
[1]=>int(308789420)
}
MongoDB不知道你的类型(除非使用BSON类型但是不会像SQL那样转换)并且它不像PHP那样松散类型,因此在int字段上搜索字符串将不起作用。请尝试改为:
$collection->update(
array('hhid' => 226304795),
array('$addToSet' => array("seg" => "8")));
答案 2 :(得分:0)
??? 226304795
数组中没有hhid
,对吧?
所以你找不到要更新的东西。
这是我的测试数据:
{ "_id" : ObjectId("5088c3396c27125921108707"), "hhid" : [ 210854544, 308789420 ], "seg" : [ 71, 91, 35, 64 ] }
我的代码:
$m = new Mongo('mongodb://localhost:27017');
$db = $m->test;
$test = $db->test;
$test->update(array('hhid'=>210854544), array('$addToSet' => array('seg' => 8)));
我的结果:
{ "_id" : ObjectId("5088c6fa6c27125921108708"), "hhid" : [ 210854544, 308789420 ], "seg" : [ 71, 91, 35, 64, 8 ] }
有效:)
另外,请注意值类型(hhid
和seg
中的值)。如果要存储或查找int
值,请勿使用双引号括起值。