我正在编写一个代码,用于在golang中从mongodb接收数据 我的代码如下:
type DataContent struct {
Create time.Time `bson:"create"`
Desc string `bson:"desc"`
}
type Data struct {
Id bson.ObjectId `bson:"_id,omitempty"`
Desc string `bson:"desc"`
Content DataContent `bson:"content"`
}
func get() error {
result := []Data{}
coll := session.DB(“”).C(“aaa”)
project := bson.M{"$project": bson.M{"_id": 1, "desc": 1, "content": 1 }}
err := coll.Pipe([]bson.M{project}).All(&result)
if err != nil {
return err
}
data, err := json.Marshal(result)
fmt.Printf("#####\n%s\n#####\n", string(data))
return nil
}
执行结果如下:
#####
[{"Id":"58133f92cf4abf18c834750d", "Desc”:”reg1\n”,"Content":{"Create":"0001-01-01T00:00:00Z","Desc":""}},
{"Id":"58134bbbcf4abf18c8347513", "Desc”:”reg2\n”,”Content":{"Create":"0001-01-01T00:00:00Z","Desc”:””}}]
#####
“内容”子字段的值未到来。
我也通过终端运行相同的流程。结果如下:
> db.aaa.aggregate([{$project: { _id:1, desc:1, content:1}}])
[{"Id":"58133f92cf4abf18c834750d", "Desc”:”reg1\n”,"Content":{"Create":ISODate("2016-10-28T13:13:13.520Z"),"Desc”:”aaa”}},
{"Id":"58134bbbcf4abf18c8347513", "Desc”:”reg2\n”,”Content":{"Create":ISODate("2016-10-28T13:09:32.810Z"),"Desc”:””}}]
有没有人让我知道如何通过管道功能获取子字段值?
此外,“内容”具有以下结构。
Content : [
{
Create : ISODate(“…”),
Desc : “…”
},
{
Create : ISODate(“…”),
Desc : “…”
}
]
答案 0 :(得分:0)
您的Content
结构不是单个值,而是值数组。这意味着无法将其加载到Data.Content
字段DataContent
中,这是Data.Content
类型的单个值。
将您的[]DataContent
字段更改为切片类型(type Data struct {
Id bson.ObjectId `bson:"_id,omitempty"`
Desc string `bson:"desc"`
Content []DataContent `bson:"content"`
}
),它会起作用:
def test_view(request, username):
msgs = MyModel.objects.filter(name=username,
created_at__range=[start_date, end_date]).order_by('-id')
arr = []
for msg in msgs:
c = TestModel.objects.get(id=msg.test_id)
if c not in arr:
arr.append(c)
return render(request, "test.html", {'context': arr})