2011-02-01 91 views
2

我有一个蒙戈查询如下所示:

{'schedule': {'$elemMatch': {'time': {'$gt': start, '$lte': end}}}} 

其搜索集合为他的“时间表”字段(这是对象的列表)的项目包含一个元素,其“时间”字段在开始和结束之间。

我不清楚mongo的索引如何处理这种情况,并想知道如果这个查询定期发生,最佳做法是什么?

回答

0

这是错误的语法,但应该工作。当一个对象中有多个字段(特别是数组)需要匹配时,使用$ elemMatch。只需一个字段就不需要$ elemMatch。

你应该这样做:

{"schedule.time" : { $gt: <start>, $lte: <end> }}

这是更清楚,你使用的是单场,即使它会在多个数组元素,在这种情况下。 “schedule.time”上的索引可用于此查询以提高效率。

+0

好点。我不认为这会起作用,因为如果日程安排是一个整数列表而不是对象列表,并且您没有{'schedule':{'$ gt':start,'$ lte':end}},它会匹配所有同时具有元素>开始和元素<=结束的项目,但不一定是相同的元素。我检查了你的版本,并且更清晰。谢谢。 – 2011-02-01 17:59:44