Node.js 使用动态Mongoose查找和样式查询

Node.js 使用动态Mongoose查找和样式查询,node.js,mongodb,mongoose,mongodb-query,Node.js,Mongodb,Mongoose,Mongodb Query,在这种情况下,用户可以输入多个约束以返回结果。我正在尝试在猫鼬中执行一个“查找”,我可以在上面执行多个“和”。我以为下面的第一个块会返回我的结果,但它会返回我数据库中当前的所有结果。我试图实现的最终目标是,只有当perc>=5时,“5B6D8B”和“BA4D2A”的两个十六进制值条目才为我提供路径。如果我只是传递“{hex:5B6D8B”,“img.perc':{$gte:5}”,发现它会返回一个正确的结果 clrModel.find([{hex: "5B6D8B", 'img.perc': {

在这种情况下,用户可以输入多个约束以返回结果。我正在尝试在猫鼬中执行一个“查找”,我可以在上面执行多个“和”。我以为下面的第一个块会返回我的结果,但它会返回我数据库中当前的所有结果。我试图实现的最终目标是,只有当perc>=5时,“5B6D8B”和“BA4D2A”的两个十六进制值条目才为我提供路径。如果我只是传递“{hex:5B6D8B”,“img.perc':{$gte:5}”,发现它会返回一个正确的结果

clrModel.find([{hex: "5B6D8B", 'img.perc': {$gte: 5} },
{hex: "BA4D2A", 'img.perc': {$gte: 5} }] ,'img.path', function(error,data){});
第二部分是,如果可能的话,我想动态地构建传递给“find”的值。好像我不能把它当作字符串传递,因为它不起作用。有什么办法可以做到这一点吗?下面的方块是我试图做的,但它不起作用。不确定这是否有助于更好地理解我试图做的事情。下面显示的“finalFind”是我将作为第一个参数传递给find查询的结果。提前谢谢

var hex, perc, finalFind = '{';
for(var i = 0; i < numIndicies; i++){
    finalFind += '{hex:"' + hexArr[i] + '", {perc: {$gte:' + percArr[i] + '}}}';
    //Handle our end character
    if(i !== numIndicies-1)
        finalFind += ',';
    else
        finalFind += '}';
}

对于同一个属性(hex),你不能有一个和有两个值,因为这是不可能的,所以我假设你想要一个AND子句和一个OR子句,如下所示。并且是您的条件对象的默认值,因此您只需要
$或
您的十六进制值

clrModel.find({
  'img.perc': {$gte: 5},
  $or: [
    {hex: "5B6D8B"},
    {hex: "BA4D2A"}
  ]
}, 'img.path', function(error,data) {....
应返回相同结果的另一个变量:

clrModel.find({
  'img.perc': {$gte: 5},
  hex: {$in: ["5B6D8B", "BA4D2A"]}
}, 'img.path', function(error,data) {....

谢谢你,彼得!那对我来说是愚蠢的。我在想,如果我使用or,它只返回其中一个,那么我应该从查询的角度考虑它。你可能已经知道了,这真是太棒了!关于如何将“[“5B6D8B”,“BA4D2A”]”之类的东西转换成可以传递给十六进制条目hex:{$in:[“5B6D8B”,“BA4D2A”]的对象,有什么想法吗?当我使用JSON.parse时,它会给我一个错误,指出有一个额外的字符“,”。我将把这个问题确定为已解决,因为我的主要问题已经解决。再次感谢!我猜您正在循环中构建一个十六进制值的字符串数组,并且您的代码在末尾添加了一个逗号。但是,我认为您不必要地从字符串数组转换为JSON字符串,再转换为字符串数组。直接使用
hex:{$in:hexArr}
就可以了。最后一个问题,我保证:)我在数据库中的文档看起来就像我上面编辑的条目。例如,如果我想在子文档img.perc值大于5的情况下提取与十六进制匹配的文档,我可以在下面的行中执行嵌套查询吗?每个文档都包含不同的十六进制值。所以在传递的数组中,我只想在百分比匹配的情况下选择它。十六进制:{$in:[“5B6D8B”,“BA4D2A”]}请单独提交一个问题。不鼓励使用扩展注释线程。
clrModel.find({
  'img.perc': {$gte: 5},
  hex: {$in: ["5B6D8B", "BA4D2A"]}
}, 'img.path', function(error,data) {....