MongoDB Text和2D复合索引

时间:2014-07-26 07:29:45

标签: mongodb

我试图这样做

db.users.ensureIndex({"books.title":"text", "location":"2d"})

并且MongoDB拒绝使用此错误创建索引

{
    "ok" : 0,
    "errmsg" : "bad index key pattern { books.title: \"text\", location: \"2d\" }: Can't use more than one index plugin for a single index.",
    "code" : 67
}

文本索引是否不能与复合索引中的2d索引一起使用? 如果是,那么处理基于第一个books.title字段然后跟location字段的查询的可能解决方法是什么?

谢谢

更新:

文字索引是必要的,因为我计划在不久的将来使用加权(http://docs.mongodb.org/manual/tutorial/control-results-of-text-search/),其中books.title可能会books.titlebooks.aboutbooks.keywords

关于查询,它将是这样的

db.users.find({"books.title": "eragon", location: { $near :[ 150 , 23 ]}})

这意味着,找到位置接近我的点的用户,他们的书名为“eragon”

1 个答案:

答案 0 :(得分:0)

对于此类用例,可以使用$geoWithin代替$ near。 $ geoWithin可以不使用2d / 2dsphere索引。其他索引(文本索引)将用于根据文本搜索过滤结果,第二步$ geoWithin将根据位置过滤结果(无索引)。