如何使用 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)),
));
我是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)),
));