如何使用猫鼬中的值数组查询一组对象?

时间:2020-07-07 09:22:38

标签: node.js mongodb mongoose

我有一个这样的模式

const rankSchema = new Schema(
  {
    rank: { type: Object, default: {} },
    lastUpdated: { type: Date, default: Date.now() },
  },
  { minimize: false }
);

我的数据库有一个对象“ rank”,其中有许多其他对象,像这样。

rank: {
  Person1: { Stat1: 2, Stat2: 0, Stat3: 0, Stat4: 2, Stat5: 4 },
  Person2: { Stat1: 4, Stat2: 0, Stat3: 0, Stat4: 2, Stat5: 2 },
  Person3: { Stat1: 1, Stat2: 0, Stat3: 0, Stat4: 2, Stat5: 1 },
  Person4: { Stat1: 2, Stat2: 0, Stat3: 0, Stat4: 2, Stat5: 3 }
}

现在我有一个包含其中一些人的字符串数组

['Person1', 'Person2']

我希望能够找到该数组中的所有人员对象并返回其统计信息。 因此,基本上,使用字符串数组后的最终输出将是

Person1: { Stat1: 2, Stat2: 0, Stat3: 0, Stat4: 2, Stat5: 4 },
Person2: { Stat1: 4, Stat2: 0, Stat3: 0, Stat4: 2, Stat5: 2 }

我尝试使用$in和各种不同的查询,但似乎没有任何效果,我很困惑。

谢谢

1 个答案:

答案 0 :(得分:2)

您可以结合使用$objectToArray$arrayToObject来按动态字段名称过滤对象,但是如果在构建查询时知道了参数,则使用常规{{3 }}并应用投影:

db.collection.find({},{ "rank.Person1": 1,  "rank.Person2": 1})

let input = ['Person1', 'Person2'];
let entries = input.map(p => ([`rank.${p}`, 1]))
let projection = Object.fromEntries(entries);
console.log(projection);

.find()