【发布时间】:2018-01-10 21:31:16
【问题描述】:
我有以下结构。我使用 Golang 1.9.2。
// EventBoost describes the model of a EventBoost
type EventBoost struct {
ID string `bson:"_id" json:"_id" valid:"alphanum,printableascii"`
CampaignID string `bson:"_campaign_id" json:"_campaign_id" valid:"alphanum,printableascii"`
Name string `bson:"name" json:"name"`
Description string `bson:"description" json:"description"`
Level string `bson:"level" json:"level"`
EventID string `bson:"_event_id" json:"_event_id" valid:"alphanum,printableascii"`
StartDate time.Time `bson:"start_date" json:"start_date"`
EndDate time.Time `bson:"end_date" json:"end_date"`
IsPublished bool `bson:"is_published" json:"is_published"`
CreatedBy string `bson:"created_by" json:"created_by"`
CreatedAt time.Time `bson:"created_at" json:"created_at"`
ModifiedAt time.Time `bson:"modified_at" json:"modified_at"`
}
// LocationBoost describes the model of a LocationBoost
type LocationBoost struct {
ID string `bson:"_id" json:"_id" valid:"alphanum,printableascii"`
CampaignID string `bson:"_campaign_id" json:"_campaign_id" valid:"alphanum,printableascii"`
Name string `bson:"name" json:"name"`
Description string `bson:"description" json:"description"`
Level string `bson:"level" json:"level"`
LocationID string `bson:"_location_id" json:"_location_id" valid:"alphanum,printableascii"`
StartDate time.Time `bson:"start_date" json:"start_date"`
EndDate time.Time `bson:"end_date" json:"end_date"`
IsPublished bool `bson:"is_published" json:"is_published"`
CreatedBy string `bson:"created_by" json:"created_by"`
CreatedAt time.Time `bson:"created_at" json:"created_at"`
ModifiedAt time.Time `bson:"modified_at" json:"modified_at"`
}
// Campaign describes the model of a Campaign
type Campaign struct {
ID string `bson:"_id" json:"_id" valid:"alphanum,printableascii"`
Name string `bson:"name" json:"name"`
Description string `bson:"description" json:"description"`
EventBoostIDs []string `bson:"event_boost_ids" json:"event_boost_ids"`
LocationBoostIDs []string `bson:"location_boost_ids" json:"location_boost_ids"`
StartDate time.Time `bson:"start_date" json:"start_date"`
EndDate time.Time `bson:"end_date" json:"end_date"`
IsPublished bool `bson:"is_published" json:"is_published"`
CreatedBy string `bson:"created_by" json:"created_by"`
CreatedAt time.Time `bson:"created_at" json:"created_at"`
ModifiedAt time.Time `bson:"modified_at" json:"modified_at"`
}
Campaign(了解营销活动)由 Events 或 Locations 组成,可以通过级别(基本或高级)提升.广告活动有开始日期和结束日期,提升也有。
GetEventLevel 函数必须返回给定事件的级别。
// GetEventLevel of an event
func (dao *campaignDAO) GetEventLevel(eventID string) (string, error) {
}
如果事件在一个活跃的活动(isPublished 是true)中被提升,并且提升是活跃的(isPublished 是true)并且现在的日期介于提升的开始日期和结束日期之间,那么我的事件是提升的,因此该函数返回级别(基本或高级)。否则返回"standard"。
我的问题是:我可以用 Mongo 完全做到这一点吗?还是我需要在 DAO 中使用 Golang 执行一些逻辑?
如果我能用 Mongo 做到这一点,我希望,我不知道如何做到这一点。据我了解,我首先需要查找活动的事件和位置,然后在其中搜索日期,但是..
【问题讨论】:
-
如果您的
Campaign不包含嵌入的EventBoosts 和LocationBoosts(只是它们的ID),那么它们的类型应该是string的一部分(Campaign.EventBoostIDs的类型和Campaign.LocationBoostIDs应该是[]string)。您将它们存储在不同的集合中是否正确?或者你在你的 DAO 中填充这些? -
抱歉,我复制/粘贴错误。这些当然是字符串。让我编辑原始帖子。
-
另外,将这些存储在
Campaign中有什么用?因为如果提升还存储了CampaignID,那么可以通过过滤广告系列 ID 来查询它们? -
CampaignID 可以从
EventBoost和LocationBoost或Campaign 中的ID 中删除,这是正确的,但我现在想保留它。 -
您期待什么样的答案? MongoDB(控制台)查询或如何在 Go 中执行(使用
mgo)?