如何在字段属性之一未知的情况下使用猫鼬声明动态模式

时间:2019-05-31 08:03:37

标签: typescript mongoose

我是Mongoose和Typescript的新手,正在尝试为mongoDB的现有集合创建模式。字段之一是一个对象,其中将存在具有不同属性(键值对)的10种不同类型的对象中的任何一种。我不确定如何声明架构数据类型。

我尝试使用Schema.Types.Mixed将字段类型声明为Mixed,这导致在使用Express Server运行时抛出错误。错误如下....

在严格模式下,对象文字不能具有多个具有相同名称的属性。

而且它找不到字段名称本身。

我有一些属性/键值对,即ID,在字段“数据”中有Project。我需要检查项目是否与“ / DeptName / TeamName”之类的东西匹配,然后需要检索集合中存在的所有文档。

架构如下:-

import * as mongoose from "mongoose";
const Schema = mongoose.Schema;
export const ContactSchema = new Schema(
  {
    id: {
      type: Schema.Types.ObjectId
    },
    itemId: {
      type: String
    },
    data: {
      type: Schema.Types.Mixed
    }
  },
  { strict: false }
);

控制器如下:-

public getContacts(req: Request, res: Response) {
    Contact.find({ data: req.params.itemId }, (err, contact) => {
      if (err) {
        res.send("ERROR : " + err);
      }
      res.json("DATA : " + contact);
    });
  }

在运行Express Server时,抛出一个错误,提示对象文字在严格模式下不能具有相同名称的多个属性。而且,它找不到字段“数据”。与“ id”和“ itemId”搜索一样,它工作正常。

我尝试搜索其他文章,但未找到合适的解决方案。有人请提供一些输入。

预期:一些文档列表

收到错误消息:在严格模式下,对象文字不能具有相同名称的多个属性。

0 个答案:

没有答案