Javascript 在node.js应用程序中使用$or运算符的命令行参数有什么问题?
Javascript 在node.js应用程序中使用$or运算符的命令行参数有什么问题?,javascript,json,node.js,mongodb,Javascript,Json,Node.js,Mongodb,var MongoClient=require('mongodb')。MongoClient, assert=require('assert'); 变量分配选项=[{ 概述:“维基”, }, { 里程碑:“CMO” }]; var numqueryesfinished=0; var companiesSeen={}; 对于(var i=0;i
var MongoClient=require('mongodb')。MongoClient,
assert=require('assert');
变量分配选项=[{
概述:“维基”,
}, {
里程碑:“CMO”
}];
var numqueryesfinished=0;
var companiesSeen={};
对于(var i=0;i
来自文档
数组中的$or运算符应包含对象。所以查询应该是这样的
query.overview = {$or: [{overview : {"$regex": options.overview, "$options":"i"}}, {tag_list : {"$regex": options.overview, "$options": "i"}} ]};
编辑。
这是你的问题。使用$or运算符时,必须始终首先传递它。
因此,查询可以像这样
{$or:[…]}
,但不能像这样{somefield:{$or:[…}}}
首先,您应该确保理解问题和要使用的工具
现在请查看您使用的查询概述
字段的值
但是您要求检查概述
字段或标记列表
字段是否与选项的值相等。概述
。在mongo shell中,给定的查询如下所示:
find({$or:[{"overview":{$exists:true,$regex: options.overview, "$options":"i"}},{"tag_list":{$exists:true,$regex: options.overview, "$options":"i"}}]})
所以你很接近正确答案。您的查询可能如下所示:
query = {$or:[{"overview":{$exists:true,$regex: options.overview, "$options":"i"}},{"tag_list":{$exists:true,$regex: options.overview, "$options":"i"}}]};
我检查了字段是否存在,但这是可选的
祝你好运)我又犯了一个错误<代码>$或没有定义。好吧……让我们简单一点。像这样尝试->集合。查找({$or:[{overview:{“$regex”:options.overview,“$options”:“i”}},{tag_list:{“$regex”:options.overview,“$options”:“i”}]})…您会有相同的错误吗?我想你有类似于coll.find的东西({query.overview={$or:…})这可能会导致很多错误。我不认为索引是这里的问题;问题的范围不清楚,您将如何解决它。我注意到您的代码中有很多错误,例如,首先,您正在通过
allOptions
数组循环,并向mongodb w发送异步请求我在一个反模式的循环中。很难遵循您试图在程序中实现的目标,我相信它需要一个简单的方法。您需要更改查询生成器,以生成如下内容{$or:[{overview:{$regex:options.overview,“$options”:“I”},{$regex:options.里程碑,$options:“I”}}…因此,我建议启动构建数组并推送您需要的所有查询参数,然后将其添加到query.overview.$或key中。我现在将尝试修复它。@MykolaBorysyuk非常感谢!非常感谢:)
find({$or:[{"overview":{$exists:true,$regex: options.overview, "$options":"i"}},{"tag_list":{$exists:true,$regex: options.overview, "$options":"i"}}]})
query = {$or:[{"overview":{$exists:true,$regex: options.overview, "$options":"i"}},{"tag_list":{$exists:true,$regex: options.overview, "$options":"i"}}]};