Node.js 如何在NodeJS中的MongoDB find查询中多次使用同一字段
我有一个MongoDB集合,其中的记录有一个Node.js 如何在NodeJS中的MongoDB find查询中多次使用同一字段,node.js,mongodb,Node.js,Mongodb,我有一个MongoDB集合,其中的记录有一个“name”字段,我正在尝试执行查找查询,其中name字段在查询中出现两次。我想通过$nin排除某些名称,并对其他名称执行正则表达式搜索。它似乎不起作用,因为它返回所有记录。如果我只使用正则表达式搜索或$nin搜索,它将按预期工作 db.users.find({name:{$nin:[当前用户]}).cb(数组)-works db.users.find({name:new RegExp(/query/)}).cb(array)-works db.use
“name”
字段,我正在尝试执行查找查询,其中name字段在查询中出现两次。我想通过$nin
排除某些名称,并对其他名称执行正则表达式搜索。它似乎不起作用,因为它返回所有记录。如果我只使用正则表达式搜索或$nin
搜索,它将按预期工作
db.users.find({name:{$nin:[当前用户]}).cb(数组)
-works
db.users.find({name:new RegExp(/query/)}).cb(array)
-works
db.users.find({name:{$nin:[current_user]},name:new RegExp(/query/)})。cb(array)
-不起作用,当前_用户未从查找结果中排除
我有一种感觉,find命令对同一字段的多个匹配项进行最后一次查询,是这样吗?我如何绕过它
谢谢你的帮助,
Gary您的查询JSON对象两次包含
name
字段,它会中断查询。请注意mongo查询运算符。有两种方法可以构造正确的查询:
1)db.users.find({$and:[{name:{$nin:[当前用户]}},{name:{$regex:new RegExp(/query/)}}}})
2)db.users.find({name:{$nin:[当前用户],$regex:newregexp(/query/)})
此外,如果仅排除一个用户,则可以使用运算符而不是
$nin
您的查询JSON对象包含名称
字段两次,这会中断查询。请注意mongo查询运算符。有两种方法可以构造正确的查询:
1)db.users.find({$and:[{name:{$nin:[当前用户]}},{name:{$regex:new RegExp(/query/)}}}})
2)db.users.find({name:{$nin:[当前用户],$regex:newregexp(/query/)})
另外,如果只排除一个用户,则可以使用运算符而不是
$nin
我的印象是,find命令中以逗号分隔的键:值对列表相当于执行AND操作,但我想在多次使用该字段时不会这样做。谢谢。是的,逗号分隔是正确的方法sing$and不是正确的方法。因此1)不是正确的方法,2)是,除非您的正则表达式语法错误。1)但为什么是这样?我对简单的测试数据运行了这样的查询,它给了我预期的结果。还说“如果,但是,查询需要对同一字段执行and操作,例如{price:{$ne:1.99}
和{price:{$exists:true}
,然后对两个单独的表达式使用$和
运算符,或者将字段的运算符表达式组合起来{price:{$ne:1.99,$exists:true}
”。也许我遗漏了什么?2)谢谢你指出这个错误!我已经更正了。我的印象是,find命令中以逗号分隔的键:值对列表相当于执行AND操作,但我想在多次使用该字段时不会。谢谢。是的,逗号分隔是正确的方法。我们ing$and不是正确的方法。所以1)不是这样做的方法,2)是这样,除非你的正则表达式语法是错误的。1)但为什么是这样?我对简单的测试数据运行了这样的查询,它给了我预期的结果。还说“如果,但是,一个查询需要对相同的字段执行and操作,例如{price:{$ne:1.99}
和{price:{$exists:true}
,然后对两个单独的表达式使用$和
运算符,或者将字段{price:{$ne:1.99,$exists:true}}
的运算符表达式组合在一起。也许我遗漏了什么?2)谢谢你指出这个错误!我已经纠正了它。