使用Mongoose在字段的子字符串上填充
Use populate on a substring of a field with Mongoose
我正在将我的API从Parse.com迁移到我自己的Express.js代码。我创建了猫鼬模型来匹配解析创建的数据库,但我遇到了一个关于指针(关系)的问题。
以下是两个模型(尽可能简化)
const CustomerSchema = new mongoose.Schema({
_id : { type: String, required: true, default: () => randomstring.generate(10) },
name : { type: String, required: true, trim: true },
_p_group : { type: String, required: true, trim: true, set: v => `Group'$${v}`, get: v => v.substr(6) },
});
const GroupSchema = new mongoose.Schema({
_id : { type: String, required: true, default: () => randomstring.generate(10) },
name : { type: String, required: true, trim: true },
});
所以问题来了:_p_group
是指向Group
的"指针",但parse不在其中存储id,而是存储Group$THE_ID
。例如,如果客户来自id为ndj879gLjt
的组,则_p_group
将包含Group$ndj879gLjt
。
我该如何处理关系?如何返回客户及其组?通常的方法是将ref: "Group"
添加到_p_group
的选项中,并执行Customer.find({}).populate('_p_group')
,但由于明显的原因,它在这里不起作用。
Parse使用的是mongodb(但不是mongoose),所以必须有一种方法。此外,该解决方案必须与Parse兼容。在最坏的情况下,我仍然可以创建一个包含id的新字段_customer
,但这会使我更新20Go的数据,这不是我真正想要的。
要使populate工作,您的类型应该是mongoose.Schema.ObjectId
,这样就存储了ObjectId
,属性ref
应该是引用的集合的名称。
我认为以下内容应该适用于populate
const CustomerSchema = new mongoose.Schema({
_id : { type: String, required: true, default: () => randomstring.generate(10) },
name : { type: String, required: true, trim: true },
_p_group : { type: mongoose.Schema.ObjectId, ref: 'Group', required: true, trim: true },
});
因此,在查看了Parse Server源代码后,似乎他们实际上正在执行多个请求,并且根本不使用populate。他们首先会找到所有与查询匹配的Customers
,然后循环结果以获得groupId列表,然后查询Group
,其中_id in [list of groupId]
。
相关文章:
- 如何使用JSON字符串中的jQuery填充下拉框
- 使用JSON文件中的变量(字符串)填充文本区域
- Javascript使用本地存储,回调对象并用Json更改为一个字符串以用于填充函数
- '使用文本区域中的字符串动态填充下拉菜单
- 使用字符串数组中的字符填充 HTML 表
- 通过位置栏更改查询字符串,AJAX加载的菜单不会't在没有硬刷新的情况下重新填充
- 使用Mongoose在字段的子字符串上填充
- 如何用字符串日期填充日期选择器表单
- 使用javascript字符串填充多个输入字段
- 用字符串填充文本区域
- 用字符串填充数组的最佳方法
- 使用基于查询字符串参数的 Angular 填充选择元素
- 使用 PHP 填充引导输入 - 字符串变量中出现空格错误
- 使用 JSON 字符串填充剑道 UI 网格
- 用单个json字符串填充多个选择框
- 从PHP代码返回的JSON字符串填充下拉列表
- 数组的字符串填充的数据在jquery中,但去空控制器
- 使用字符串填充表元素
- 从JSON(通过字符串)填充组合框
- 使用书签小工具用字符串填充页面上的每个字段