如何使用MongoDB shell从MongoDB集合获取特定字段?
我已经使用shell命令在Mongodb集合“clicklog”中为json文件建立了索引。下面是我的shell命令的结果:如何使用MongoDB shell从MongoDB集合获取特定字段?
db.clicklogs.find().pretty()
输出:
{
"_id" : ObjectId("58fe78dcfbe21fa7896552e8"),
"preview" : false,
"offset" : 0,
"result" : {
"search_term" : "484797",
"request_time" : "Sat Apr 01 23:58:49 -0400 2017",
"request_ip" : "127.0.0.1",
"stats_type" : "clickstats",
"upi" : "66024330304",
"unit" : "CITCS",
"job_title" : "IT Engineer",
"vpu" : "ICR",
"organization" : "73",
"location" : "MH",
"city" : "San Diego",
"country" : "USA",
"title" : "TOM",
"tab_name" : "People-Tab",
"page_name" : "PEOPLE",
"result_number" : "1",
"page_num" : "0",
"session_id" : "14e88b44576ad4fdc035bc41529762ad1",
"total_results" : "1",
"_raw":"request_time=Sat Apr 01 23:58:49 -0400 2017,request_ip=127.0.0.1,application=Search,stats_type=clickstats,upi=660243301304,unit=CITCS,job_title=IT Assistant, Client Services,vpu=ICR,location=DHAKA, BANGLADESH (IFC),organization=73,city=Dhaka,country=BANGLADESH,city_code=,search_term=484797,title= Tom,url=http://isearch.worldbank.org/skillfinder/ppl_profile_new/000484797,tab_name=People-Tab,page_name=PEOPLE,result_number=1,page_num=0,filter=qterm=484797,total_results=1,app_environment=production,log_version=1.0,session_id=4e88b44576ad4fdc035bc41529762ad1",
"_time":"2017-04-01T23:58:49.000-0400"
}
}
{"_id" : ObjectId("58fe78dcfbe21fa7896552e9"),
"preview" : false,
"offset" : 0,
"result" : {
"search_term" : "demo",
"request_time" : "Sat Apr 01 23:58:49 -0400 2017",
"request_ip" : "127.0.0.1",
....
"time":"2017-04-01T23:58:49.000-0400"
}
}
对于每一个JSON文件,我想只得到几个字段(ID,搜索关键词,合众国际社,PAGE_NAME,会话ID, url(在_raw下))。是否有可能使用mongo shell命令并将结果文档存储在新集合中?任何帮助表示赞赏。
您可以在3.4版本中尝试下面的聚合。
查询使用$split
操作符几次达到url
值。其余是标准投影场。
$out
阶段将结果写入新集合。
db.getCollection('clicklogs').aggregate([{
$project: {
searchterm: "$result.searchterm",
upi: "$result.upi",
page_name: "$result.page_name",
session_id: "$result.session_id",
url: {
$let: {
vars: {
obj: {
$arrayElemAt: [{
$split: ["$result._raw", ',']
}, 1]
}
},
in: {
$arrayElemAt: [{
$split: ["$$obj", '=']
}, 1]
}
}
}
}
},
{
$out: "clicklogs_temp"
}
])
嘿Veeram,其实我并没有在问题的前面添加整个_raw数据。我更新了我的问题。该网址现在位于第18位。我试图通过将
它应该工作。只是为了确认你确实改变了第一个'arrayAtElement'索引值吧?如果是,请验证数据。它适用于我在帖子中提供的数据。 – Veeram
是的。在obj和in中,我将areayAtElement更改为17次。我将再次检查。该集合约有6400个json文档。感谢您的回复。 – Rose
你的mongodb版本是什么? – Veeram
我在最新版本3.4.4 – Rose