【问题标题】:Querying nested aliases with Mongoose使用 Mongoose 查询嵌套别名
【发布时间】: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 团队肯定认为人们会嵌套别名,所以让我们做的不仅仅是顶级可查询,当然是我哈哈。任何人都可以在这里提出解决方案,这让我发疯了。

【问题讨论】:

    标签: mongoose aliases


    【解决方案1】:

    作为一种解决方法,我创建了一个查询映射对象,它将我的别名点路径映射到非别名点路径。例如。

    const queryMap = {"name.first":"n.f","name.last":"n.l",...};
    

    这不是解决方案,但它有效,并且作为副作用,允许拒绝不适合地图的查询。

    【讨论】:

      猜你喜欢
      • 2021-07-09
      • 2014-08-05
      • 1970-01-01
      • 2012-10-17
      • 2012-06-23
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多