0

我尝试对 Mongo Db 执行更新查询。我使用 php,并发送将要更新的值。我以毫秒为单位发送日期参数。但它没有用。这是代码;

    function updateEventById($id1,$start,$end,$collection)
{
    $this->collection = $this->database->$collection;

    //$start=new MongoDate($start);

    //$end=new MongoDate($end);

    $newdata = array('$set' => array("start.sec" => $start,
                "end.sec" =>  $end ));

    $theObjId = new MongoId($id1["\$id"]);
    $this->collection->update(array("_id" => $theObjId), $newdata);

}
4

2 回答 2

0

在codeigniter框架中工作,所以:

  $this->_comment->mongo_db->where(array("idnota" => (int)$idnota, "type" => 3))->set($update)->update($collection);

我认为问题在于 id 尝试比较 vardump () 以查看它是否达到适当的参数

于 2012-12-26T20:40:32.417 回答
0

我已经使用 Mongo Shell 尝试过您的案例,并且工作正常。

> db.col.insert({start: {sec: new Date()}, end: {sec: new Date()}})
> db.col.find()
{ "_id" : ObjectId("50db7b136db4ad2bff518a03"), "start" : { "sec" : ISODate("201
2-12-26T22:32:51.098Z") }, "end" : { "sec" : ISODate("2012-12-26T22:32:51.098Z")
 } }
> db.col.update({_id: ObjectId("50db7b136db4ad2bff518a03")}, {$set: {"start.sec"
: new Date(), "end.sec": new Date()}})
> db.col.find()
{ "_id" : ObjectId("50db7b136db4ad2bff518a03"), "start" : { "sec" : ISODate("201
2-12-26T22:33:33.725Z") }, "end" : { "sec" : ISODate("2012-12-26T22:33:33.725Z")
 } }
>

我认为你应该使用 MongoDB 实例中的 selectCollection 函数而不是调用属性(因为 PyMongo 工作,扩展__getitem____getattr__):

$this->database->selectCollection($collection)->update(array("_id" => $theObjId), $newdata);

另一个问题,可能你应该调试你的代码,因为“集合”属性类可能会在另一个集合中执行更新之前更改它的值。

如果您使用的是 MongoClient 类,请参阅 WriteConcern 结果。

于 2012-12-26T22:53:09.337 回答