我遇到一个问题,我正在尝试对文档列表进行文本索引:
我先插入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获得的数据库响应。
请帮帮我。
由于
答案 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" } ] }