ドキュメントは以下のようなものです。
{
"title": "Book1",
"dailyactiviescores":[
{
"date": 2013-06-05,
"score": 10,
},
{
"date": 2013-06-06,
"score": 21,
},
]
}
1 日のアクティブ スコアは、読者が本を開くと増加することを意図しています。最初に頭に浮かぶ解決策は、「$」を使用して、対象の日付にスコアがあるかどうかを調べ、それを処理することです。
err = bookCollection.Update(
{"title":"Book1", "dailyactivescore.date": 2013-06-06},
{"$inc":{"dailyactivescore.$.score": 1}})
if err == ErrNotFound {
bookCollection.Update({"title":"Book1"}, {"$push":...})
}
しかし、配列内の項目のインデックスを返す方法はあるのでしょうか? その場合、2 つではなく 1 つのクエリを使用して作業を行うことができます。このような。
index = bookCollection.Find(
{"title":"Book1", "dailyactivescore.date": 2013-06-06}).Select({"$index"})
if index != -1 {
incTarget = FormatString("dailyactivescore.%d.score", index)
bookCollection.Update(..., {"$inc": {incTarget: 1}})
} else {
//push here
}