我有一种情况,用户可能会输入多个约束来返回结果。我试图在猫鼬中执行“查找”,我可以执行多个“和”。我认为下面的第一个块会返回我的结果,而是返回当前在我的数据库中的所有结果。我试图实现的最终目标是来自“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"
}
}
]
}
答案 0 :(得分: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) {....