带有typegoose的mongoose返回null,以便使用有效的objectId进行引用

时间:2018-03-04 17:04:11

标签: typescript mongoose

我正在使用库https://github.com/szokodiakos/typegoose来创建猫鼬模型。

Item.ts

export class Item extends Typegoose { }

const ItemModel = new Item().getModelForClass(Item);
export default ItemModel;

User.ts

import { InventoryItem } from "./InventoryItem";

export class BagItem extends Typegoose {
  @prop({ ref: Item })
  Item?: Ref<Item>;

  @prop()
  Quantity: Number;
}

export class User extends Typegoose {
  @arrayProp({ items: BagItem })
  Bag?: BagItem[];
}

export const BagItemModel = new BagItem().getModelForClass(BagItem);
const UserModel = new User().getModelForClass(User);

export default UserModel;

当我尝试填充Item时,该项为null。但是使用与常规mongoose模型相同的数据库,我可以在BagItem中填充Item字段。

app.ts

UserModel.findById(req.user._id).then((user: any) => {
  return user.populate("Bag.Item").execPopulate();
}).then((bagPopulatedUser: User) => {
  console.log("The bag", bagPopulatedUser.Cart);
}).catch((err: MongoError) => {
  console.log(err);
});

2 个答案:

答案 0 :(得分:0)

原来我需要指定模型并且它有效。

UserModel.findById(req.user._id).then((user: any) => {
  return user.populate({
    path: "Bag.Item",
    model: "Item"
    }).execPopulate();
}).then((bagPopulatedUser: User) => {
  console.log("The bag", bagPopulatedUser.Cart);
}).catch((err: MongoError) => {
  console.log(err);
});

答案 1 :(得分:0)

如果您需要对多个文档执行此操作,那么它是-

y = RNN(cells, return_state=True)(x)

尽管对我来说,我发现const users = await UserModel.find(); await UserModel.populate(users, {path: 'Bag.Item', model: 'Item'}); //now users[i].item is an Item 不能工作,但是path: 'Bag.Item'可以工作。也许去年有所改变。