Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mongo DB和Go-使用动态数据模型_Mongodb_Go_Mgo - Fatal编程技术网

Mongodb Mongo DB和Go-使用动态数据模型

Mongodb Mongo DB和Go-使用动态数据模型,mongodb,go,mgo,Mongodb,Go,Mgo,我面临着一个问题,我不知道该走哪条路。所以我在这里问。我有一个应用程序,其中可以有产品,也可以有产品的元数据。可以从前端创建和删除这些元数据。比如说,今天每个产品都有两个元数据(例如名称、价格),明天可能是三个、四个或更多,甚至少于两个。所以这是动态的。我试图将数据表示如下 Product = { "_id": mongo "Name": string "Description": string "BasePrice": number "CreatedB

我面临着一个问题,我不知道该走哪条路。所以我在这里问。我有一个应用程序,其中可以有产品,也可以有产品的元数据。可以从前端创建和删除这些元数据。比如说,今天每个产品都有两个元数据(例如名称、价格),明天可能是三个、四个或更多,甚至少于两个。所以这是动态的。我试图将数据表示如下

Product = 
{
    "_id": mongo
    "Name": string
    "Description": string
    "BasePrice": number
    "CreatedBy": user mongo _id
    "CreatedAt": timestamp
    "ModifiedAt": timestamp
    "MetaData": BSON object (having all the keys from ProductMetadata collection and their values. e.g. {"Category": "table ware", "Material": "oak wood, copper", "Length": 5.6})

}

ProductMetadata = 
{
    "_id": mongo
    "Name": string (e.g. - "Category" or "Material" or "Height")
    "Type": string (indicating what kind of value it can hold like string/integer/array. e.g. - "string")
    "CreatedAt": timestamp
    "ModifiedAt": timestamp
}
正如您所看到的,这是一种纯粹的动态情况,因此在代码级别拥有一个表示模型的结构是不可能的

我的问题是,我如何使用mgo和Go-lang实现这样一个东西?如果我需要使用反射,那么有人能告诉我一个好的博客/教程,在那里我可以获得更多的信息。或者,如果您认为数据建模方法中存在一个基本问题,请纠正我的错误,以便使用Go轻松实现

在Python中,实现这一点不会有问题。我知道。但我对围棋的实施感到困惑

请帮忙


提前感谢

如果元数据的键是唯一的,为什么不使用映射呢

这意味着您的产品结构如下所示:

struct Product {
    ID        bson.ObjectId `bson:"_id,omitempty"`
    Name string
    Description string
     ... omitted other fields ...
    MetaData map[string]map[string]interface{} // map of string -> map of string -> anything
}
如果给定元数据可以有多个实例,即:2个类别,请使用列表:

struct Product {
    ID        bson.ObjectId `bson:"_id,omitempty"`
    Name string
    Description string
     ... omitted other fields ...
    MetaData []map[string]interface{} // list of maps of string -> anything
}

这会有帮助吗?谢谢,我想这就是我想要的:)这也是一个很好的解决方案,大卫。我会试试这个。感谢您可能希望使用map[string]接口{}来代替bson.M。我对它感到厌倦的唯一原因是它将bson包泄漏到您的代码的其余部分,无论您想在哪里创建该映射的新文本版本。我通常会尽可能减少第三方导入,以便在以后不可避免地更改我的库以用于给定目的时,我可以少维护一些。我同意