MongoDB文本索引数组对象列

时间:2014-09-21 08:59:20

标签: mongodb mongodb-query

我遇到一个问题,我正在尝试对文档列表进行文本索引:

我先插入DB:

db.userlikes.insert({
   "data": [
    {
       "category": "Non-profit organization",
       "name": "Animals"
    },
    {
       "category": "Community",
       "name": "Computers"
    }
   ]
})

然后我尝试为类别列创建索引:

db.userlikes.ensureIndex({"data.category": "text"})

但是当我试图搜索时,我没有得到任何结果:

db.userlikes.find({"data.category": "profit"})

难道不能以这种方式编制索引吗?最好的方法是将每个文档分别插入数组("数据")吗?这将是一个开销,因为我只想插入我从API获得的数据库响应。

请帮帮我。

由于

2 个答案:

答案 0 :(得分:1)

请阅读the documentation concerning text searches

文字搜索就像这样

db.userlikes.find({ $text: {$search:"profit"} })

因为每个集合只能有一个文本索引(尽管可以索引多个字段)。

答案 1 :(得分:0)

我尝试了相同的步骤EA9。它似乎对我有用。您可能想要检查某处的任何拼写错误。这是我输出的命令。

db.userlikes.insert({
...    "data": [
...     {
...        "category": "Non-profit organization",
...        "name": "Animals"
...     },
...     {
...        "category": "Community",
...        "name": "Computers"
...     }
...    ]
... });
WriteResult({ "nInserted" : 1 })

db.userlikes.find();

{ "_id" : ObjectId("541ff8dc1dca72499395cbcf"), "data" : [ { "category" : "Non-profit organization", "name" : "Animals" }, { "category" : "Community", "name" : "Computers" } ] }


db.userlikes.ensureIndex({"data.category": "text"})


{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}


 db.userlikes.find({ $text: { $search: "profit" } });


{ "_id" : ObjectId("541ff8dc1dca72499395cbcf"), "data" : [ { "category" : "Non-profit organization", "name" : "Animals" }, { "category" : "Community", "name" : "Computers" } ] }