如何用typegoose猫鼬自动填充

时间:2019-04-10 16:34:27

标签: mongodb typescript auto-populate

我在mongodb和 对于mongodb建模,我正在使用 Typegoose 。他们还没有自动填充功能。

我正在使用

  

https://github.com/szokodiakos/typegoose

并且只想使用自动填充

  

https://www.npmjs.com/package/mongoose-autopopulate

4 个答案:

答案 0 :(得分:0)

autopopulate装饰器有一个prop选项,其用法如下:

import { prop, Ref } from '@typegoose/typegoose';

class Person {
  @prop()
  name: string
}

class User {
  @prop({ autopopulate: true, ref: Person })
  person: Ref<Person>;

  @prop()
  password: string;
}

答案 1 :(得分:0)

Typegoose在com.huawei.hms:ads-lite:13.4.28.305装饰器上有一个autopopulate选项,就像@Mateja在回答中所说的那样。但是,它本身并不起作用,您首先需要安装auto-populate插件并像这样设置您的实体...

prop

有关更多信息,请检查Typegoose Documentation

答案 2 :(得分:0)

在这里,我们有3个馆藏商店,所有者,文件,口香糖。 以ObjectId作为所有者和文档的引用的商店。但是gumasta的参考在所有者收藏文档中。因此要填充子子文档使用 下面的代码在typegoose中。

     const vehicleEntity = await ShopModel.findOne({ "id": id })
        .populate({
            path: 'owner',
            populate: {
                path: 'gumasta',
                model: 'Gumasta'
            }
        })
        .populate('documents')
        .exec();

商店的实际结构是

shops{
id: "string"
name: "string"
address_short: "string",
owner: ObjectId('asddsfsdfsdfs34csd7d') // Reference of owner data in owner collection
,documents: [ObjectId('asddsfsdfsdfs34csd7e'), ObjectId('asddsfsdfsdfs34csd7f')]
}

所有者在下面有数据

owners{
 id
 shop_id
 reg_no
 gumasta: ObjectId('sdfsdfsdfs343')
}

答案 3 :(得分:0)

我不得不使用这样的东西:

import { prop, Ref, plugin } from '@typegoose/typegoose';
import mongooseAutoPopulate from 'mongoose-autopopulate';

@plugin(mongooseAutoPopulate as any)
class Person {
  @prop()
  name: string
}

class User {
  @prop({ autopopulate: true, ref: Person })
  person: Ref<Person>;

  @prop()
  password: string;
}

如果我尝试像在文档中一样使用它:

import * as autopopulate from 'mongoose-autopopulate'; 

@plugin(autopopulate as any) 

我收到此错误: Error: First param to 'schema.plugin()' must be a function, got "object"