簡體   English   中英

如何從 Java Springboot 執行復雜的 MongoDB 本機查詢

[英]How to execute a complex MongoDB native query from Java Springboot

我有一個使用 3 collections 創建視圖的復雜查詢。 查詢以本機級別編寫。 我需要從 Java 執行該查詢,有什么方法可以從 Java 級別執行這些類型的查詢。 也許 function 將 MongoDB 本機查詢作為字符串並在數據庫級別執行

db.createView('TARGET_COLLECTION', 'SOURCE_COLLECTION_1', [
  {
    $facet: {
      SOURCE_COLLECTION_1: [
        {$match: {}},
        { $project: { "sourceId":  {$toString: "$_id"}, "name": 1, "image": "$logo" }}
      ],
      SOURCE_COLLECTION_2: [
        {$limit: 1},
        {
          $lookup: {
            from: 'SOURCE_COLLECTION_2',
            localField: '__unexistingfield',
            foreignField: '__unexistingfield',
            as: '__col2'
          }
        },
        {$unwind: '$__col2'},
        {$replaceRoot: {newRoot: '$__col2'}},
        { $project: { "sourceId": {$toString: "$_id"}, "name": 1, "image": 1 }}
      ],
      SOURCE_COLLECTION_3: [
        {$limit: 1},
        {
          $lookup: {
            from: 'SOURCE_COLLECTION_3',
            localField: '__unexistingfield',
            foreignField: '__unexistingfield',
            as: '__col2'
          }
        },
        {$unwind: '$__col2'},
        {$replaceRoot: {newRoot: '$__col2'}},
        { $project: { "sourceId":  {$toString: "$_id"}, "name": 1, "image": "$logo" }}
      ]
    },
  },
  {$project: {data: {$concatArrays: ['$SOURCE_COLLECTION_1', '$SOURCE_COLLECTION_2', '$SOURCE_COLLECTION_3']}}},
  {$unwind: '$data'},
  {$replaceRoot: {newRoot: '$data'}}
])

一個例子:

考慮集合中的一個文檔:

{ _id: 1234, name: "J. Doe", colors: [ "red", "black" ] }

以及來自mongo shell 的以下聚合:

db.collection.agregate( [
  { $project: { _id: 0, colors: 1 } }
] )

這將返回: { "colors": [ "red", "black" ] }

這也可以使用以下命令運行:

db.runCommand( { 
  aggregate: "collection", 
  pipeline: [ { $project: { _id: 0, colors: 1 } } ],  
  cursor: { } 
} )

而且,它的翻譯使用 Spring Data's MongoTemplate

String jsonCommand = "{ aggregate: 'collection', pipeline: [ { $project: { _id: 0, colors: 1 } } ], cursor: { } }";
Document resultDoc = mongoTemplate.executeCommand(jsonCommand);

output 文檔resultDoc的格式如下:

{
        "cursor" : {
                "firstBatch" : [
                        {
                                "colors" : [
                                        "red",
                                        "black"
                                ]
                        }
                ],
                "id" : NumberLong(0),
                "ns" : "test.colors"
        },
        "ok" : 1
}

要了解有關db.runCommand(...)方法的更多信息,請參閱 MongoDB 文檔:數據庫命令數據庫命令聚合

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM