我在MongoDB中有一个COLLECTION collflokks
,示例文档是: -
{
"_id" : "b_8AUL",
"f_name" : "Pizza. Hut",
"f_lat" : "22.7523513",
"f_lng" : "75.9225847",
"c_uid" : "33",
"f_type" : NumberLong(3),
"members" : [
"42",
"43"
]
}
在"成员"数组,我想添加像{id:42,name:Mark}
,{id:43,name:Hughes}
这样的数组
目前我只添加ID(例如.42,43)。我只关心新数据,因为它会有新的ID。请建议。
之前我使用此代码进入成员数组:
$flokkCollection = 'collFlokks';
$flokkCollection->update(
array("_id" => $f_handle),
array('$push' => array("members" => $u_id))
);
答案 0 :(得分:1)
如果您在这里要求的是“替换现有数据”,那么您需要“循环”集合中的结果并“替换”新格式存在的数组内容。
有可能采用更明智的方法来解决这个问题,但您并没有真正向我们提供您问题中的所有必需信息,因此我只能用基本术语回答。
假设你有:
$required = array(
array(array("id" => "42"), array("name" => "Mark")),
array(array("id" => "43"), array("name" => "Hughes"))
);
作为输入,那么你做这样的事情:
function myMapper($v) {
return $v["id"];
}
$mapped = array_map("myMapper",$required);
foreach( $mapped as $value) {
$filtered = array_values(
array_filter($required,function($k) {
return $k["id"] == $value;
})
)[0];
collection.update(array(
array("members" => $value),
array('$set' => array(
"members.$" => $filtered
))
));
}
哪个应该使用positional $
operator通过update语句的“query”部分中使用的值来查找数组元素的匹配“位置”,然后在该语句的“update”部分中{{ 3}}当前数组索引到原始输入数组的“过滤”内容索引处的新值。
PHP之外。我们称这些内部元素为“对象”而不是“数组”,这是PHP符号特征。键/值的东西是“对象”,“列表”是“数组”。