[英]Springboot: How to execute custom mongodb query by springboot?
[英]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.