我有一个如下所示的数据集:
{ "id" : "1.2.1", "name" : "abc1" }
{ "id" : "1.2.3", "name" : "abc2" }
{ "id" : "1.2.2", "name" : "abc3" }
{ "id" : "1.2.1", "name" : "abc4" }
{ "id" : "1.2.4", "name" : "abc5" }
我想获取所有以id = 1.2开头的记录。所以在shell中我可以愉快地使用:
db.collection.find({id : /^1.2/})
它工作正常。但是现在从node.js / mongoose尝试发出相同的find时,我希望这个1.2是一个变量。 我的问题是我不能做像
这样的事情var q = {"id" : \/\^ + id + "/"};
获取非法令牌错误。这可能就像JS逃避技术一样简单,我不知道。 任何帮助都将受到高度赞赏,并从多个查询中保存mongodb:)
虽然这更像是一个通用的mongoDB发现问题,如果有人可以暗示我如何使用mongoose作为类似的运算符,那就太棒了。 顺便说一下,由于性能方面的考虑,我不想在这里使用regEx。
提前致谢...
答案 0 :(得分:0)
您确实意识到您正在执行的查询 是来自您的第一个示例的正则表达式操作。但似乎你遇到了如何将其转化为动态的问题。这是$regex
运算符语法的来源:
var id = "1.2";
db.collection.find({ "_id": { "$regex": "^" + id } })
这通常是你如何在mongo shell之外使用运算符。
使用正则表达式的好处是,当你不锚定到字段的开头时,就像你那样,你正在扫描一个完整的索引甚至可能是集合。
当您执行锚定时,索引可以受词汇匹配约束以限制扫描的内容。在你的情况下,它将是" 1.2"的词汇范围。到" 1.3"。