使用MongoDB批准/待定

时间:2012-08-28 01:28:36

标签: php mongodb

我有一个客户想要收集合作伙伴的优惠,但他们需要批准更改。什么是保持合作伙伴变更历史的最佳方式?

所以这是它的工作原理

{
partner_id: {here}
offer1:
offer2:
offer3:
date:
status:
}

我需要一种方法来检查是否有任何优惠改变(但只有1回),如果更改了插入并将过去的优惠改为状态:历史记录

应该只有以下状态:

历史
未决
批准

但是如果他们正在插入新的优惠但是有一个已批准的优惠,那么在我们批准之前它需要保持批准状态。

我该怎么做?这就是我的想法:

    <?php

    function checkoffers($data)
    {
    $this->data = $data;

    $collection = $this->db->partner_offers;
    if($this->data["_id"] != null)
    {
      $cursor = $collection->insert(RUN INSERT ARRAY)
    }
    else
    {
      $cursor = $collection->find(array("_id"=>new MongoId($this->data["_id"])));

      if ($cursor->count() > 0)
        {
            $test = array();
            while( $cursor->hasNext() ) {   
                $test[] = ($cursor->getNext());
            }


                     foreach($test as $offers)
                     {
                      check to see if offer matches the past offer. if not then run new function and insert.
}


                 }


    }

?>

1 个答案:

答案 0 :(得分:0)

一种方法是使用每个要约的文档组织您的架构:

{
    partner_id: 123,
    offer: 'Even better than the last one',
    date: ISODate("2012-08-28T10:00"),
    status: 'pending'
}
{
    partner_id: 123,
    offer: 'The best of the best',
    date: ISODate("2012-08-28T09:00"),
    status: 'approved'
}
{
    partner_id: 123,
    offer: 'An offer you cannot refuse',
    date: ISODate("2012-08-28T08:00"),
    status: 'approved'
}

然后,您可以轻松找到按状态和日期排序的最新批准或待处理商品:

> db.partner.find({partner_id:123, status:'approved'}).sort({date:-1}).limit(1)

{
    "_id" : ObjectId("503c6c8be16d4a06b6f0da17"),
    "partner_id" : 123,
    "offer" : "The best of the best",
    "date" : ISODate("2012-08-28T09:00:00Z"),
    "status" : "approved"
}