2015-11-21 65 views
2

我正在使用mongodb库为codeigniter.i想要从嵌入文档中删除元素。我的收藏如下 -从mongodb的嵌入文档中删除元素

{ 
"_id" : ObjectId("56503a272f170d30298b45ad"), 
"gm_creation_time" : "2015-11-21 09:32:23", 
"gm_favourites" : [ 
    { 
     "gm_user_id" : "55f90ccf2f170d79048b4570", 
     "gm_id" : "56503a272f170d30298b45ad", 
     "date" : "2015-11-21 09:32:40" 
    } 
], 
"gm_members" : [ 
    "560391de2f170d1e108b4574", 
    "55f90ccf2f170d79048b4570" 
], 
"gm_name" : "[email protected]", 
"gm_owner" : "55f90ccf2f170d79048b4570", 
"gm_photo" : null, 
"gm_posts" : [ ], 
"gm_type" : "1", 
"gm_updation_time" : "2015-11-21 09:32:40" 
} 

如何根据gm_user_id从收藏夹中删除。我是codeigniter + mongodb的新手。请帮助

+0

可能重复[如何从Mongo中完全删除字段?](http://stackoverflow.com/questions/6851933/how-do-i-remove-a-field-completely-from-mongo) –

回答

2

使用$pull数组修饰符运算符可从现有数组中删除与指定条件匹配的一个或多个值的所有实例。

以下蒙戈操作更新集合中的所有文件,与从阵列gm_favourites"55f90ccf2f170d79048b4570""gm_user_id"属性中删除对象:

db.collection.update(
    { }, 
    { 
     "$pull": { 
      "gm_favourites": { 
       "gm_user_id": "55f90ccf2f170d79048b4570" 
      } 
     } 
    }, 
    { "multi": true } 
); 

这将转化为PHP如下:

$connection = new Mongo(); 
$db = $connection->selectDB('dbname'); 
$collection = $db->selectCollection('collection_name'); 

$filter = array(); 
$remove_document = array(
    '$pull' => array(
     'gm_favourites' => array(
      'gm_user_id' => '55f90ccf2f170d79048b4570', 
     ) 
    ) 
); 
$options['multiple'] = true; 

$collection->update($filter, $remove_document, $options); 
1

如果要基于gm_user_id删除嵌入文档,请使用以下命令。 (假设集合名称是我的最爱):

db.test.update({},{$拉:{ 'gm_favourites':{ 'gm_user_id': '55f90ccf2f170d79048b4570'}}})

上述命令将删除匹配的嵌入文档。

+0

我该如何使用它codeigniter,我已经尝试过这样 - $ this-> mongo_db-> pull('gm_favourites',array('gm_id'=> $ groupId,'gm_user_id'=> $ userId)) - > update('group_master'); 但它不工作 – sneha