mongoose,在两个阵列中找到任何一个?

时间:2017-07-20 01:07:00

标签: node.js mongodb mongoose

我有一个这样的架构:

{
  color: [
    "red",
    "yellow"
  ]
  ...
}

集合中的任何文档都可以有任意数量的颜色(主要七个名称)。

在猫鼬中,我尝试找到任何匹配的文件,"红色"或者"蓝色"或"绿色"并返回包含这三种颜色中的任何一种的文档,我不想过滤掉其他颜色,例如"黄色"。我在运营商中尝试了mongodb $

model.find({ colors: { "$in": ["red", "blue", "green"] } })
  .limit(50).exec((err, data) => {
    if (err) throw err;
    else console.log(data);
});

但是,当我运行时,即使有至少有红色,蓝色或绿色的吨,我也得不到任何回报。

我想获取任何文件color []匹配任何比较颜色[]的文档。

编辑:

我试过了:

var colors = ["red", "blue"];
var obj = {};

obj.$match = { 'color': { '$in': colors } };
obj.$match = { 'color': { '$elemMatch': colors } };
obj.$match = { 'color.$': { '$in': colors } };
obj.$match = { 'color.*': { '$in': colors } };

obj = { colors: { $elemMatch: { $in: colors } } };

model.find(obj, ...);

其他组合基于该帖子,但我仍然得不到任何回报。

我基本上想要这样的东西:

var CheckIfAnyInArray = (obj) => {
  obj.color.forEach((i) => {
    if (colors.indexOf(i) > -1) return true;
  };
  return false;
};

编辑:解决方案......

所以,我是一个白痴,问题不是我的称呼它是一个错字。文档架构是' colors'没有'颜色'。我一直在俯瞰着'而没有意识到这一点。

所以这个解决方案有效:

model.find({ colors: { $in: colors } })...;

我非常愚蠢的错误。

0 个答案:

没有答案