查询是:
{$and:[
{phone:phone},
{$gte:{date:'2014-08-25'}},
{$lt:{date:'2014-08-30'}}
]}
然后显示错误:
{ [MongoError: Can't canonicalize query: BadValue unknown top level operator: $gte] name: 'MongoError' }
这个错误的含义是什么?
答案 0 :(得分:3)
您的整个查询结构确实不正确。运算符以参数形式作用于“字段”。因此,操作员对于该领域的“价值”是一种说话方式的“关键”。
除了“所有”MongoDB查询实际上隐含的是“和”查询。只有在为同一字段指定多个条件时,才需要$and
运算符本身。但这不是您使用$gte
和$lt
运算符进行“范围查询”的方式,而是将它们“组合”在同一个“运算符文档”中:
db.collection.find({
"phone": phone,
"date": { "$gte": "2014-08-25", "$lte": "2014-08-30" }
})
此处值得注意的是,这仅适用于日期实际为“字符串”的情况。你真正“应该”拥有的是你的集合中的“日期对象”,它通常在shell中表示如下:
ISODate("2014-08-29T17:51:30.428Z")
这将对您有很大帮助,因为您可以使用日期执行其他操作,同样不需要将这些“转换”为代码中的任何其他操作。如果您有实际的“日期对象”,那么您只需使用其他日期对象实例来查询它们:
db.collection.find({
"phone": phone,
"date": { "$gte": new Date("2014-08-25"), "$lte": new Date("2014-08-30") }
})
答案 1 :(得分:1)
你需要做
{date: {$gte: '2014-08-25'}}
同样适用于$lt
http://docs.mongodb.org/manual/reference/operator/query/gte/#op._S_gte