如何使用 Laravel 4 将对象插入 MongoDB 文档

How to insert an object into MongoDB document using Laravel 4

我是LaravelMongoDB的新手在这里提个问题,我的Mongo文档大纲应该是这样的

{
     _id:****,
     subscriptions: [{list_id: "14Q3"},
        {list_id: "153"}],
     offers: [ { targetURL: "www.qwerty.com", title: "25% discount" }, 
    { targetURL: "www.abcd.com", title: "55% discount" } ],
}

我使用下面的代码插入了一个列表 id(成功)。

DB::connection('mongodb')->collection('subscribers')->insert(array(
                    '_id' => $subscriber->device_id,
                    'subscriptions' => array('list_id' => $subscriber->list1_id),
                     ));

但是当我尝试将另一个 list_id 作为下一个对象推送时,它显示错误。我使用以下代码进行推送

DB::connection('mongodb')->collection('subscribers')
->push('subscriptions', array('list_id' => $subscriber->list1_id));

我不知道我的代码是对还是错。我需要将数据存储为上面给出的大纲。这是我的实际问题。请指正....

我的控制器如下所示,我为每个订阅者创建了新的集合。问题是第二个 'if' 语句

public function store() {

        $newsubscriber = Input::json(); 
        //DB::connection('mongodb')->collection($newsubscriber->get('device_id'))->delete();
        $result = Subscriber::where('list1_id',$newsubscriber->get('list_id'))->where('device_id',$newsubscriber->get('device_id'))->get();
        if (!$result->isEmpty()) {
        return "You are already a subscriber of this List";
    }
    else{
        $result1 = Subscriber::where('device_id',$newsubscriber->get('device_id'))->get();
        $subscriber = new Subscriber();
        $subscriber->list1_id = $newsubscriber->get('list_id');
        $subscriber->device_id = $newsubscriber->get('device_id');
        $subscriber->subtype = 1;
        $subscriber->save();

        if (!$result1->isEmpty()) {
            DB::connection('mongodb')->collection($subscriber->device_id)->push('subscriptions', array('list_id' => $subscriber->list1_id));
            return "Subscribed successfully 1";
        }
        else{
            DB::connection('mongodb')->collection($subscriber->device_id)->insert(array('_id' => $subscriber->device_id,'subscriptions' => array('list_id' => $subscriber->list1_id),

        ));

            return "Subscribed successfully 2";
        }

    }
    } 

首先我使用了以下API

curl -H "Content-Type: application/json" -d '{"list_id":"2","device_id":"987654321"}' http://localhost/lemmeknw/public/index.php/api/v1/subscribe

这返回了"Subscribed successfully 2"

但是当我第二次使用API时

curl -H "Content-Type: application/json" -d '{"list_id":"1","device_id":"987654321"}' http://localhost/lemmeknw/public/index.php/api/v1/subscribe

出现错误"Something went wrong"

我对 Laravel 了解不多,但我在这里看到的是:

DB::connection('mongodb')->collection('subscribers')->insert(array(
               '_id' => $subscriber->device_id,
               'subscriptions' => array('list_id' => $subscriber->list1_id),
              ));

看起来您正在创建 subscriptions 作为一个对象 {list_id: <subscriber-list1_id>} 而不是一个对象 [{list_id: <subscriber-list1_id>}] 的数组。所以当你尝试使用push操作时

DB::connection('mongodb')->collection('subscribers')
  ->push('subscriptions', array('list_id' => $subscriber->list1_id));

这是对对象而不是数组的尝试push。我的猜测是您需要将插入内容修改为

DB::connection('mongodb')->collection('subscribers')->insert(array(
               '_id' => $subscriber->device_id,
               'subscriptions' => array(array('list_id' => $subscriber->list1_id)),
              ));