如何在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和各种不同的查询,但似乎都不起作用,我被难住了。

感谢

您可以使用$objectToArray和$arrayToObject的组合来按动态字段名过滤对象,但如果在构建查询时您的参数是已知的,那么使用常规.find()并应用投影会更容易:

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);

Mongo游乐场

最新更新