gpt4 book ai didi

node.js - nodejs + mongo + find + $和错误: Can't canonicalize query

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:38 26 4
gpt4 key购买 nike

查询是:

{$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' }

这个错误是什么意思?

最佳答案

您的整个查询结构实际上并不正确。运算符以参数形式作用于“字段”。所以从某种意义上来说,运算符就是字段的“值”,就像“键”一样。

除此之外,“所有”MongoDB 查询实际上隐式是一个“and”查询。 $and仅当您为同一字段指定多个条件时才需要运算符本身。但这不是使用 $gte 进行“范围查询”的方式。和 $lt运算符,而是将它们“组合”在同一个“运算 rune 档”中:

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") }
})

关于node.js - nodejs + mongo + find + $和错误: Can't canonicalize query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25578534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com