我正在尝试开发一个基于RESTful的MongoDB PHP。我做了一篇文章,传递这样一个JSON体:
{"id":"1","timestamp":"blah blah","value:"blah"}
然后,在名为"device“的集合中,我想创建这样一个结构:
{ _id: 1
alt: blah
lng : blah
senseddata: {
timestamp: blah
value :blah
}
{
timestamp: blah blah
value: blah
}
.
.
.
}
换句话说,我只想更新“感测数据”字段。因此,我在中编写了这个查询:
db.device.update({"_id":1},{$push:{"senseddata":{"timestamp":1234,"value":"12"}}})
而且效果很好。现在,我尝试在PHP中做同样的事情。我写了这个:
$id = $data['id'];
$timestamp = $data['timestamp'];
$value = $data['value'];
$collection = $db->device;
$collection->update(array("_id" => $id),
array('$push' => array('senseddata' => array('timespamp' => $timestamp,'value' => $value)))
);
但没起作用。然后我尝试使用'$set‘,我注意到了一种奇怪的行为:如果我保留代码的原样,它就不能工作。但如果我那样写的话:
//$id = $data['id'];
$timestamp = $data['timestamp'];
$value = $data['value'];
$id = 1;
$collection = $db->device;
$collection->update(array("_id" => $id),
array('$push' => array('senseddata' => array('timespamp' => $timestamp,'value' => $value)))
);
它工作(我不明白为什么),但它改变(如预期)我的集合的结构。这不是我想要的。有什么建议吗?提前谢谢。
发布于 2014-01-28 08:56:19
这两段代码完全相同,只是在第二个代码中硬编码了$data['id']
值,我认为这不是MongoDB的问题,而是您传递的数据的问题。
我将进一步调试您的应用程序。
编辑
JSON将id
显示为字符串:
{"id":"1","timestamp":"blah blah","value:"blah"}
但你永远不会转换为int
。MongoDB可以识别类型,所以您需要:
$id = intval($data['id']);
$timestamp = $data['timestamp'];
$value = $data['value'];
$collection = $db->device;
$collection->update(
array("_id" => $id),
array('$push' => array('senseddata' => array('timespamp' => $timestamp,'value' => $value)))
);
https://stackoverflow.com/questions/21400211
复制相似问题