mgo-後続テスト(フィールドを指定し、idを取得)

7317 ワード

mgoのDBRefをテストした後、指定したフィールドの表示をテストしようとしたところ、フレームワークコードが採用されていたことがわかり、多くの問題が隠されていました.
1.指定されたフィールドを表示します.
以前はmgoを使用するときはすべてのフィールドをクエリーしていましたが、mongo端末環境では次のように書かれています.
> db.logs.find({},{"log":1})
{ "_id" : "3a06384a40a8e587806f194c6c80253e", "log" : " " }
{ "_id" : "36bb718040a4362b8035ebd822125dba", "log" : " " }

logコンテンツのみの表示を保証するためにid表示を外す必要がある場合は、
> db.logs.find({},{"_id":0,"log":1})
{ "log" : " " }
{ "log" : " " }

 
golangのmgoの書き方はmgoのselect()メソッドで実現する必要があります.コードは以下の通りです.
err = d.Find(bson.M{}).Select(bson.M{"log": 1}).All(&result1)

結果は次のとおりです.
[ `run` | done: 342.828631ms ]
[{b5e57fed409eab8e804e17088b1fdaae   { <nil> } 0001-01-01 00:00:00 +0000 UTC} 
{261e7fe9402c6842807092e7f0df61ce   { <nil> } 0001-01-01 00:00:00 +0000 UTC}

id表示を削除するには:
err = d.Find(bson.M{}).Select(bson.M{"log": 1, "_id": 0}).All(&result1)

結果
{   { <nil> } 0001-01-01 00:00:00 +0000 UTC} 
{   { <nil> } 0001-01-01 00:00:00 +0000 UTC}

うん...1つのフィールドだけを表示したい場合は、ループ出力を行います.
	for i := 0; i < len(result1); i++ {
		fmt.Println(result1[i].Log)
	}

参照:mgoはどのようにしてfieldの一部を返しますか?
2.問合せIDの値:
mongo端末では簡単です.
> db.logs.find({},{"_id":1})
{ "_id" : "3a06384a40a8e587806f194c6c80253e" }
{ "_id" : "36bb718040a4362b8035ebd822125dba" }

mgoで調べられないの?問題はstructで
// 
type Log struct {
	LogId    string
	Log      string
	LogUser  mgo.DBRef
	Inserted time.Time
}

// 
type Log struct {
	LogId    string `bson:"_id"`
	Log      string
	LogUser  mgo.DBRef
	Inserted time.Time
}

IDを再照会しても問題ありません:)、調べる時間はlogidではなく「_id」を調べることに注意してください.
err = d.Find(bson.M{}).Select(bson.M{"_id": 1}).All(&result1)

結果:
{32197b67400e229f8017fd8258c2f700  { <nil> } 0001-01-01 00:00:00 +0000 UTC} 
{e7dda7b34052584280ef55f49b16eb2c { <nil> } 0001-01-01 00:00:00 +0000 UTC}

参照:mgoはどのように指定された_に基づいてid検索結果は?