1

私は夢中になっています...私はSQLの世界から来て、これがmongodbでの最初の実際の経験です。

私は与えられた json/object 構造を持っています (私は知っています、これは完璧ではありませんが、既存のデータや他のアプリケーションのためにそうでなければなりません)、http フロントエンドとして Restheart を使用して mongodb (v3.4) に格納されています。

書類はこんな感じ

{
    "_id" : ObjectId("5855cbc9fc3baea81e937261"),
    "_etag" : ObjectId("5855cbc99b971700050d8adc"),
    "log" : [
        "858489b087f7472dbb8d1012dee4cd5d.d",
        NumberLong("12345678901234"),
        {
            "ext" : {
                "text" : "someone did something at somewhere (some street 123) +38 USD",
                "markup" : [
                    [
                        "user",
                        {
                            "plain" : "someone",
                            "team" : "master"
                        }
                    ], [
                        "TEXT",
                        {
                            "plain" : " did something at "
                        }
                    ], [
                        "location",
                        {
                            "name" : "somewhere",
                            "plain" : "some street 123",
                            "team" : "master"
                        }
                    ], [
                        "TEXT",
                        {
                            "plain" : "38"
                        }
                    ], [
                        "TEXT",
                        {
                            "plain" : "USD"
                        }
                    ]
                ],
                "category" : 1,
                "team" : "master"
            }
        }
    ]
}

そして、usern.plain 名の個別のリストを取得したいと考えています。理論的db.logs.distinct("log.2.ext.markup.0.1.plain")には、私が必要とすることを正確に行います。しかし、私が理解している限り、Restheart で db.distinct を使用する方法はありません。ビューを使用してこれを試しましたが、ビューでも db.distinct を使用できないようです。

これは私の実験です...

{ "aggrs" : [
  { "stages" : [
        { "_$project" : { "user" : "$log.2.ext.markup.0.1.plain"}},
        { "_$unwind" : "$user"},
        { "_$unwind" : "$user"},
        { "_$unwind" : "$user"},
        { "_$unwind" : "$user"},
        { "_$unwind" : "$user"},
        { "_$unwind" : "$user"},
        { "_$group" : { "_id" : "$user"}}
      ],
    "type" : "pipeline",
    "uri" : "unique_users1"
  },
  { "stages" : [
        { "_$match": { "log": { "_$exists": true, "_$ne": null }}},
        { "_$unwind" : "$log"},
        { "_$unwind" : "$log.2"},
        { "_$unwind" : "$log.2.ext"},
        { "_$unwind" : "$log.2.ext.markup"},
        { "_$unwind" : "$log.2.ext.markup.0"},
        { "_$unwind" : "$log.2.ext.markup.0.1"},
        { "_$group" : { "_id" : "$log.2.ext.markup.0.1.plain"}}
      ],
    "type" : "pipeline",
    "uri" : "unique_users2"
  },
  { "stages" : [
        { "_$match" : {"log" : { "_$exists" : true }}},
        { "_$replaceRoot" : { "newRoot" : { "user": "$log.2.ext.markup.0.1.plain"}}}
      ],
      "type" : "pipeline",
      "uri" : "unique_users3"
  },
  { "stages" : [
        { "_$group" : { "_id" : 1 , "users" : { "_$addToSet" : "$log.2.ext.markup.0.1.plain"}}}
      ],
    "type" : "pipeline",
    "uri" : "unique_users4"
  }
]}

しかし、結果は... 何もないか、ほとんど何もない

{
"_embedded": {
    "rh:result": [
        {
            "_id": 1,
            "users": [
                []
            ]
        }
    ]
},
"_returned": 1,
"_size": 1,
"_total_pages": 1
}
4

0 に答える 0