Mongodb (jenssegers'驱动程序)将标签存储为字符串数组-没有索引


Laravel 4 Mongodb (jenssegers' driver) storing tags as array of strings - without indexes

如果有人有使用Jens Seger的Laravel Mongo Package (https://github.com/jenssegers/laravel-mongodb)的更多经验,请帮助我。

我有jenssegers mongodb '雄辩'模型表演者,我希望我的文档看起来像这样(简化,一些不相关的字段被删除)

{
  "performer" : "Bruno Mars", 
  "search_terms" : ["bruno mars", "pop singer", "bruno"]
}

当我在Mongo命令行中插入这个时,它看起来就像那样!完美。

但是当我在控制器中这样做时:

$tags = ["bruno mars", "pop singer", "bruno"];
$performer = new Performer; //via Moloquent (Jens extension)
$performer->performer = "Bruno Mars";
$performer->search_terms = $tags;
$performer->save();

我得到的文档看起来像这样:

{
  "performer" : "Bruno Mars", 
  "search_terms" : {"0" : "bruno mars", "1" : "pop singer", "2" : "bruno"}
}

为什么会发生这种情况?php数组有问题吗?我是否应该创建一个像

这样的字符串数组?
$searchTermsAsString = "['Bruno Mars', 'pop singer']"; 

?

我的模型是这样的:

class Performer extends Moloquent
{
    protected $collection = "search_terms";
    protected $database =  'tb_dev';
     protected $connection = 'mongodb2';
    //THIS IS GHETTO FIX
    public function __construct()
    {
        parent::__construct();
    } 
}

我也是Mongodb的新手,所以我可能是妄想认为

("项目","第二条","item3")不同于{' 1 ':"项","2":"第二条","3":"item3"}

如果我理解正确的话一个是ARRAY另一个是OBJECT (Javascript和json中都是)

好了,我知道为什么会这样了…它与model或mongo都没有关系

我在循环中添加各种标签,在循环结束时,我运行array_unique();以删除重复的标签。

显然,如果你array_push('item');'item'已经存在于数组中,它将创建数字索引:array(0 => 'item1', 1 => 'item', 2=>'item')...当然,解决方案比我想象的要简单。

谢谢。