mongoose - 使用 Mongoose 查询嵌套别名
问题描述
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 团队肯定认为人们会嵌套别名,所以让我们做的不仅仅是顶级可查询,当然是我哈哈。任何人都可以在这里放弃解决方案,这让我发疯。
解决方案
作为一种解决方法,我创建了一个查询映射对象,它将我的别名点路径映射到非别名点路径。前任。
const queryMap = {"name.first":"n.f","name.last":"n.l",...};
这不是解决方案,但它有效并且作为副作用,允许拒绝不适合地图的查询。
推荐阅读
- c++ - 在 c++ 中用 new 分配一个结构矩阵
- git - 使用数字符号(哈希符号)在交互式 rebase 中提交壁球
- node.js - 角度拖放可重用组件
- java - 如何以编程方式调用自定义导航器中节点上的“刷新”功能?
- python - numpy.random 的 Generator 类和 np.random 方法有什么区别?
- java - HashMap获取输入的排序值+将最高值打印为字符串和整数
- php - 如何从地址栏中隐藏 php 页面?
- javascript - 图片加载错误原因如何处理?
- c - 如何将数据从 file.dat 存储到结构数组
- json - 如何查看元素是否存在于Python中的json文件中?