Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在NodeJS中的MongoDB find查询中多次使用同一字段_Node.js_Mongodb - Fatal编程技术网

Node.js 如何在NodeJS中的MongoDB find查询中多次使用同一字段

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

我有一个MongoDB集合,其中的记录有一个
“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)谢谢你指出这个错误!我已经纠正了它。