【发布时间】:2019-04-01 04:48:26
【问题描述】:
Mongoose 5.3.3 - 在简单字段上查询别名按预期工作。 例如。
const userSchema = new Schema({h:{alias:"handle",type:String}});
const User = model("User",userSchema);
const user = new User({handle:"Jack"});
const query = {handle:"Jack"};
const users = await User.find(User.translateAliases(query));
console.log(users);
// prints [{...,handle:"Jack",...}]
但是,对于嵌套的 props,每个都有别名,查询仅在使用非别名字段名时执行。 例如。
const userSchema = new Schema({
n:{alias:"name",type:{
f:{alias:"first",type:String},
l:{alias:"last",type:String}}}});
const User = model("User",userSchema);
const user = new User({name:{first:"Jack",last:"Swift"}});
const query1 = {"name.first":"Jack"};
const query2 = {name:{first:"Jack"}};
const query3 = {"name.f":"Jack"};
const query4 = {"n.f":"Jack"};
const users1 = await User.find(User.translateAliases(query1));
const users2 = await User.find(User.translateAliases(query2));
const users3 = await User.find(User.translateAliases(query3));
const users4 = await User.find(User.translateAliases(query4));
console.log(users1,users2,users3,users4);
// prints [],[],[],[{...name:{first:"Jack,last:"Swift"}...}]
我也尝试过 1) 在架构声明中使用完整的点路径内联
alias:"name.first"
而不仅仅是“第一”,并且 2) 使 name 属性成为一个单独的架构。
const nameSchema = new Schema({f:{alias:"first"...
const userSchema = new Schema({n:{alias:"name",type:nameSchema}});
没有骰子。我想相信 Mongoose 团队肯定认为人们会嵌套别名,所以让我们做的不仅仅是顶级可查询,当然是我哈哈。任何人都可以在这里提出解决方案,这让我发疯了。
【问题讨论】: