0

我有一种情况,用户可能会输入多个约束以返回结果。我正在尝试在猫鼬中执行“查找”,我可以执行多个“和”。我认为下面的第一个块会返回我的结果,而是返回我数据库中当前的所有结果。我试图实现的最终目标是来自“5B6D8B”和“BA4D2A”的两个十六进制值条目,仅当 perc >= 5 时才为我提供路径。如果我只是通过“{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”是我将作为第一个参数传递给查找查询的结果。提前致谢!

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 += '}';
}

-------- 编辑下方显示文档示例 --------

以下项目代表一个文档条目

{
    "__v": 0,
    "_id": {
        "$oid": "51c1ac95f502f20969000022"
    },
    "hex": "BA4D2A",
    "img": [
        {
            "path": "http://example.com/image1.jpg",
            "perc": 10,
            "_id": {
                "$oid": "51c1ac95f502f20969000023"
            }
        },
        {
            "path": "http://example.com/image2.jpg",
            "perc": 20,
            "_id": {
                "$oid": "51c1ac95f502f20969000034"
            }
        }
    ]
}
4

1 回答 1

1

好吧,你不能对同一个属性(十六进制)有两个值的 AND,因为这是不可能的,所以我假设你想要一个 AND 子句和一个 OR 子句,如下所示。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) {....
于 2013-06-19T05:17:10.437 回答