Json Structure:
"_id" : ObjectId("55d6cb28725f3019a5241781"),
"Number" : {
"value" : "1234567",
},
"DeviceID" : {
"value" : "01",
}
"type" : {
"value" : "ce06"}
Now i want to find only those keys document which start from /dev/.
i tried this script:
var cur = db.LIVEDATA.find({"ProductIMEIno.value":"359983007488004"});
cur.forEach(function(doc){
var keynames = Object.keys(doc);
print('the length is '+keynames.length);
for(var i=0;i<keynames.length;i++){
if(keynames[i].match(/Dev/)){
print("the name is "+keynames); }}} )
but this is not working properly.
Desired Output;
Only this document should show on the basis of key name search.
"DeviceID" : {
"value" : "01",
MongoDB isn't designed to find keys dynamically like this; it's much easier to use it to find values dynamically, so you could restructure your data structure to allow this:
"_id" : ObjectId("55d6cb28725f3019a5241781"),
"data" : [
{
"key" : "Number",
"value" : "1234567",
},
{
"key": "DeviceID",
"value" : "01",
},
{
"key" : "type",
"value" : "ce06"
}
]
Then you will be able to query it like this:
db.LIVEDATA.aggregate([
{$match: {"ProductIMEIno.value":"359983007488004"}},
{$unwind: "$data"},
{$match: {"data.key" : /^dev/i }}
]);
That will return data structured like this:
{
"_id" : ObjectId("55d6cb28725f3019a5241781"),
"data" : {
"key" : "DeviceID",
"value" : "01"
}
}
Suppose you have a data collection like this:
[
{
"Number": {
"value": "1234567"
},
"DeviceID": {
"value": "01"
},
"DeviceID2": {
"value": "01",
"name": "abc123"
},
"type": {
"value": "ce06"
}
},
{
"Number": {
"value": "1234568"
},
"DeviceID": {
"value": "02"
},
"type": {
"value": "ce07"
}
}
]
You can use following aggregation:
db.collection.aggregate([
{
"$match": {}
},
{
"$addFields": {
"root_key_value_list": {
"$objectToArray": "$$ROOT"
}
}
},
{
"$unwind": "$root_key_value_list"
},
{
"$match": {
"root_key_value_list.k": {
"$regex": "^Dev"
}
}
},
{
"$group": {
"_id": "$_id",
"root_key_value_list": {
"$push": "$root_key_value_list"
}
}
},
{
"$project": {
"root": {
"$arrayToObject": "$root_key_value_list"
}
}
},
{
"$replaceRoot": {
"newRoot": "$root"
}
}
])
the result will be:
[
{
"DeviceID": {
"value": "01"
},
"DeviceID2": {
"name": "abc123",
"value": "01"
}
},
{
"DeviceID": {
"value": "02"
}
}
]
playground:
https://mongoplayground.net/p/z5EeHALCqzy
Related
I have tried the following query but it was failing
db.getCollection('images').aggregate([
{
$project: {
"practiceId": "$practiceId",
"imageSize": { $binarySize: "$data" }
}
}])
And my sample data in mongodb is like
{
"_id" : ObjectId("60be3c9ea77d6312514276384"),
"_class" : "com.test.images.model.ImageEntity",
"practiceId" : NumberLong(242),
"fileName" : "img.jpg",
"contentType" : "image/jpeg",
"data" : { "$binary" : "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", "$type" : "00" },
"thumbnail" : false
}
Any suggestions?
Maybe a problem with the data format. This one works:
db.images.insertOne({
"_class": "com.test.images.model.ImageEntity",
"practiceId": NumberLong(242),
"fileName": "img.jpg",
"contentType": "image/jpeg",
"thumbnail": false,
data: BinData(0, "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")
})
db.images.aggregate([
{
$project: {
"practiceId": "$practiceId",
"imageSize": { $binarySize: "$data" }
}
}
])
{
"practiceId" : 242,
"imageSize" : 4207.0
}
I insert these two documents:
db.images.insertMany([
{
author: "you",
data: {
"$binary": "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",
"$type": "00"
},
},
{
author: "me",
data: BinData(0, "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxITEhUTExMVFhUVFyAYFRcXFxsgIBggICggICAoHx8gJTAqICYxJR8fKjsrMTU3NTU1ICs7QDo1PzA1NjUBCgoKDg0OFxAQFjgdFhorNCsvKys3Ky0rNyszKzctLTMyLS03NzcrLS0rNzc3Kys4KzgrODgrKzg4NjctNy81MP/AABEIAMgAyAMBIgACEQEDEQH/xAAbAAEAAgMBAQAAAAAAAAAAAAAABAUCAwYBB//EADwQAAEDAgQDBQUGBQQDAAAAAAEAAhEDIQQSMUEFUWEGEyJxgTKRobHBB0JSYtHwIzNy4fEUgpLSY6Ky/8QAGQEBAAMBAQAAAAAAAAAAAAAAAAECAwQF/8QAJBEBAQACAgICAgIDAAAAAAAAAAECAxEhEjEEUUFxMoETImH/2gAMAwEAAhEDEQA/APuKIiAiIgIiICIqHtjxr/S0C4HxOs3npJj9evoQce7U0cPLZDnjVo281wvFO11d4zF2UH2GNnTqOfn8FzArPdme+/i8UyZJHXXn7lDe9zjlFOTzMlZ3Jrjhz6WNLiFR7iS4Hq9x+WZTBxFtNwOhB2cSD6mY8tPgoVPhVVwAawNG8mPcBorXC9nrS8/5WN24xvj8fK/h0vZ/7QKfsVZtuTJHruPjzXc4TF06rc1NwcOYXxPF9nHgksI9LLoewfFXMf3TgQZ066e/4LTDZKy2abj7fU0WLTIWS2YCIiAiIgIiICIiAiIgIiICIiAiIgLgPtJYX1KbPuimXeuYAfvou/XJds8MCc3OnlHvn9+aipnt8yNIlvdxADpHMg/sKxwGGAiBCVmeMxoP8LdRqMbAe4BcW3m16ejxkW+F0hS6bFWYDjeFLsodJV931MAui0rLw+2/+T6QarVUjC5cQyqBv4h5f2Ut3HWPJa2k8xqRp7zC9w+Ka59MibuLSDsYJHy+K01yzJjvymWF+30ukBAjRZrRgv5bJ/CFvXe8oREQEREBERAREQEREBERAREQEREHi5ntriWtFNn335i0dBE/Me9dOvn/ANqtOo0UazdKbXx0dLHD4NcfRVzvE5aasZllxXPYOTTe8jxd44HpEED4qBU4Y9z5zZRF3QJnbXb9+XTcBoCpw9tWQX1JqujSdHRyjL6LDCsBsVzbOZeY7dMl5l/Cqq8OHcBpOarlu8WB5EDYzyMHkLET+HVHGm6k4yR8Vv42WMa24uRA5k6SvOD0gXulzQZus7zXTJMUVnAKXeGo7NpAAIjQib3BGY6HWDsIlPwIa3M2ZaWkE62I+MSrLvmNMG7ZjMDoeq21HAaXTm8/pTLCWft1HB8SKlFhGwykciLFTlX8Bo5aDBzGb33+qnrtx9R5eySZXj09REVlBERAREQEREBERAREQEREBERAVZ2h4YMRQfT31aeThcfp5FWa8UWcxMtl5jguDYOrSZUp1GZblzbROaQ6B5gn16hVmH1HX6aru+0bgKYdydr6FcM18ExqDmaubdOJI7dGfNtRMfWa8hj8skTlJHpqtnDeG0WkvDsrjrB15zzWeMp06wBLQSDIkLfw7ChvsU2+4LPGx1+/aQHtNhLgdQB+qnYPBkuawHXQnb9wVrZbXXdW3ZuiXPLzo0QPM/2+aYzyykZbc/HGuiY2AByWSIu55YiIgIiICIiAiIgIiICIiAiIgIiICIoON4hTY5tIvAqVAcjdzGp6Dqg5/tTx2kWuw4Ds5GbQAQNbzuJHquGp4wggG/J3Pz6ru+KYJrv4gbLmgtNtWm5/fUrmsbwKJfTBcw+0zdvVvMdNRG+0btVuPli1+Puxl8cukKhiBOsK6wlcNGy55+AIIg2OhU7B8OcTBdHouLiO7udLt1cHl1XWcCbFBltRPv8A7LiHUAwRMndd3wh4NGnH4B8ltpndc/yL1ExERdDkEREBERAREQEREBERAREQEREBFpq4lrd78goNTEOceQ5fqpk5RakV8eADl8RC+a9nca6vxitUqWc2lLW/lIaLeVveV3RbldMWOq+dds6D8BjaOPY0ljXRUA3Y6zh8THUjkttcnc+2Wdvt9KiHWUbE4fKczdD8FJpVW1Gtew5mPaHNI3BuCt7W2M6clEvCbOXPY3hjaot4X7H9R9VUmjUpuyuBB2PPyK6erSLD0OhVD2u7S4fCsDKnjqvE06QieWZx+42dzrBibxnt+Pjn3j1W+n5WWHWXcVmPc8iGCXu8LBzcfoNSdgCu64O3u2NpgzlAE84sfJfLT23bSqMqtw0iCH53+Mt5siWnrzj7ouvo/AuIU8Q1lai7NTewkH1AgjYgggjYgpr0XXjZfdRu+RNuU8fUX7HgrNQXslGYgtsbqPFXlORRaeNabEER+9lvZUB0MqODlmiIiRERAREQEREBERAVZjsUS7K0kRrG6sXGASufp1Lw+06FWxiuVSabAdLHqtmmu6Nat0AiDoVZVrqNkc1yn2kcSazCCj3fe1MSe6os5kwJ9JGm5C62mDodRvzGx/XqqDthw3PSZVa3M/CVW4hgGrgwy9o82gwOYCvhZMornzx05rs/wjjOGw9MU6tKo1rfDRc5ttyJNOdZtmEaSuh7NdrW4kvo1GGliKft0nCPMgHTyvrYm5VzhnBzRUaczXjN4Ta+jhGsiCfeud7admnVCzGYYkYqjp/5W/hPMwYB6wbGRbymV76UkuM6dVnbl8XsjVfBPtD4LXw1c4jvn1qFd5IqPAOV34HtiAQBaBECwEQPtnC8YK9FlTK5veMnK4EFp3EEA2IN99VWHh1Ou2rg64mnWG2oIuC07HcdQonS17fFsCw1xTY3wl9VrJF2y4gAx912+3KANfrPYzhRwOKfQYS6hXa6owHWm9uUO8wQW3/KvnI4M/BYynSqtbmpV6RzhsNNIPaWu5XIvOhtMm32Km2MXQ/pqD4NP0V7f9apJ2vSFhUpyPktjmAi4B81wOG4c/D8Yc0vf3OJpOfRaKrvC5mUuGWbCJ6EHoQMcZz+W2V4dpSGYToQtrRBkarxogu63/VZt0UUS6bwRKzUKnUynpupbXAiRoVSxeVkiIoSIiICIiAiIg04swx/9J+S5x9Q3EZgukxIljvIrmqcHQq+KmSbgqx0MmNDuPMfVT2qCadg4axdSaFabbqaiN68IusoRQlEwOGbTaGMs0eyPw3MAdACAOgC3NEHoduX9lEwlf8AiuYdcrXjqCA0+4tH/JTomymoVL6PcVLfy6jpH5XbjyIE+Y5lb+I4PMA9ntC4UrEUBUpuYbTvyIuCOoMFaOCYkvpw72mEtcOo+nLop5OHLfaFwkY3AuqsbNWgC4tH3gJzNI3tJG+oGpVb9n/HjiDgw4zUYa1Nx5w2Wn1bF9yCu/q0cju8aLffbzH6hfK+y/C/9Jx44dv8pzXVaMaZCx2WP+Tm+bSrY3qq2dx9gC4PtMMvG+HP/FTew+5//Zd4uA7aOA4twv8AqI95hNXv+qbPTuoXrAvQvKZVF3kLdhTt6rSfmsw6CCopEtF4CvVRcREQEREBERB4QubfhWk8j810Nd8NceQVKXgaiQrYq5MaBeyx8Q2UoMDrixWoaS0yNYW8AajfRXUbKbzodfmtoCwCzaoWVOOYWinXaCTS9oDVzD7Q68wOYCs2PBggghwkEbg6QvGMgR6Ku4ee6eaJ9gkmkeW7memo6GPupULM6+aqwe7xf5a7Z/3Nt8R8lauCquPSBSqD7lQf+3h+qQq4VCeBs/11LEaGnTqMbbVr8pifyuBI/rPJXrTIB5rWR/EB/KfmP0URLzGYgU2Oebx8dh8SvnnFRUr4+hiXmnkw0FrWzmOpgzO9wbeVpX0PG4YVGOYdHCFxGJ4BVEnI41ZAL2zD2gmBIPWSCBcC+ymWzuIynPVdW7HF+HdVoNzuDSWsJDSSNjNgfNQOBVn1Gs7zNLGiS4e0SBf3tJ9eqYLAPoYSsHGHva4wNiRA9ZVxSAl2wmB0DQB8wVEGxjpk8rL0tso9fFsFi65vC1VeJMByjxAe0RED9VFyi8wyv4TsO7LA2JUxQGEEzy0U1jgUpGSIiqkREQEREGL2yCOdlz1cGCDqLLo1ScSZD3dYPwj6KYrkg4OqQYVsxypmKzw1Sy0UTGLJalmCqrPKhhQ+I4eRInnbUEaEdQplUSCsWPBtuFKFPxHtG2hTa59KrUJMHuWZo/MZIgHQbzbVc9j+P4rE4lmHoYc9ycrnOc0zBuXFwOVkXtcmORC66vw+k54zsB3EjQ7+8KZTYG2AAHIIGEPgb5LJvtnoAPfKxwwiR1KzYLu8/oFFTGblivXLxAcVW8YxQpsERmdZjeZ105c/NWL1xvF657+pWmRT/hsHM6f/AESs9mfji104eeXbzK9zyzMS4/zHTz28/kFi5gDxTaJDYLz8hPx9ywog0WA5i57zAm9zqT5XJVng8HUFPwMJcTq6B6mdb3XHJbXfcpjFtgA4C4gTYD92+an0ngGR6qq4bhajPatzvqeZInqrMdV34/xjztn8r2mgr1acOdluVQREQEREBVnF2XaeYI+o+qs1D4oyaZO7TP6/CVM9oqgbqpVEdVEr6yplFgIkLRmmUnbLcorQVKpukKKmMgqvi2JFItdeDZWQChcZwhq0srfaBBF4/diq5WyWxfCS5SX0rcd2ip5LB2cXFt1p4Z2lo1XF5qEZAJbld4DuHCJJ9I5Ktq8IqscA9sTcEHX15rGrwMB3ftnvGtvoQ9tiWuBBBFrbgrmx35c8ZR1Z/Hw8ecatsRxRlNgfS11IbMEgG0Hc8tYgqJV7WV/Flp0wSbF2YgabAj5qyxWAaKbopZZgguFJsbw3u/aMayYtYqnxeFbroU3bMpej4+rCy+TpeB8YbiWFwGV7bVGTOUm4g7g7HzFiCFYFcBh8WMJVZXJimT3db+h2h/2ug+RcN19DIWurZ5Y/9Y7tfhl16YQoxwFK38NljI8I156a3N1KRa8SsubGLRGiZVkiIeJC8leyg8ZUgqaoTmqWw2HkoyTGSIiqsIiICxc2QQd7LJEHJ1W+006tK1YauWnop3FWZap5Ov8Aqq1wvC0jKugbMAjdZgkbKs4dii3wm42Vm2t0RLY2qD0PIrMDda5WUqEvK9IOEH06KIcCdnX6hTWr2VW4S+4vM7PVcLS4BWa5kurPNPxAOqNy5jNmkgFwkmATpHJZVXOmHNLTyc0ifKdfRdoCAtdVwcC1zQWnUESD5hVz1TJfXuuD55xwB1JzTur/AOzTi/e4c0XumpQOW+pYfZ91x6Dms+J9mqTmnI57Z2zTHlmm3T3RoeMoYbF8NxTK0CpSnK8ssXNOog2nQi8SAq69OWN67jTZuwzx+q+uPCxLllTqBzQ5plrgC0jcG4QhbOZrL16Hr0tWJpogcjXSvMpWD6Z1BhShk52ysAFW4cEuAN4uVZquS2IiIqrCIiAiIgpOPs8TT0+X+VS1TdEWk9M8vbbh3K3olEUoSA4IXrxFCXmYr3MiKRm0BZQERQPHAQudpPaS6g8jUinO8/dP093JEVsUVa8EYKdPu5s1xyg7A3j3ypzqo5hEVb3Vp6a3Ylo3Wt2NaNwiJwjlpfxRnO/S/wAkompVNrDclES9QndWuGw4YIHqea3IizaCIiD/2Q==")
}
])
The mongoexport looks like this:
{
"_id": { "$oid": "60f92b42607c82337782654e" },
"author": "you",
"data": {
"$binary": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAk...",
"$type": "00"
}
},
{
"_id": { "$oid": "60f92b42607c82337782654f" },
"author": "me",
"data": {
"$binary": {
"base64": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAA...",
"subType": "00"
}
}
}
Looks like mongo does not recognize it as Binary Data, the output is different.
Suppose I have the following collection.
[
{
"items": {
"item": [
{
"#pid": "131",
"text": "Apple"
},
{
"#pid": "61",
"text": "Mango"
},
{
"#pid": "92",
"text": "cherry"
},
{
"#pid": "27",
"text": "grape"
},
{
"#pid": "34",
"text": "dragonfruit"
}
]
},
"type": "A"
},
{
"items": {
"item": [
{
"#pid": "131",
"text": "Apple"
},
{
"#pid": "27",
"text": "grape"
},
{
"#pid": "34",
"text": "dragonfruit"
}
]
},
"type": "B"
},
{
"items": {
"item": [
{
"#pid": "131",
"text": "Apple"
}
]
},
"type": "A"
}
]
I want to get the type in which apple or mango is sold, group by item name. For the above collection, the output would be :
{
"_id": "Apple",
"items" : [
"A",
"B",
"A"
]
},
{
"_id": "Mango",
"items" : [
"A"
]
}
I tried the following query but it return nothing :
db.collection.aggregate([
{
$match : {
'items.item.text' : {$regex : 'Apple|Mango'}
}
},
{
$project : {
type : "$type"
}
},
{
$group : {
_id : '$items.item',
types : {$push : '$type'}
}
}
])
I think that even if this works, it's going to group by the entire 'items.item'. Where am I going wrong?
P.S. : I don't have the liberty to change the format of the document
Thanks a lot in advance.
You were on the right direction. You need to use $unwind operator and you don't need $project stage in your aggregation. The below query will be helpful:
db.collection.aggregate([
{
$unwind: "$items.item"
},
{
$match: {
"items.item.text": {
$regex: "Apple|Mango"
}
}
},
{
$group: {
_id: "$items.item.text",
type: {
$push: "$type"
}
}
}
])
MongoPlayGroundLink
I have a document in MongoDB 3.4 with the following structure:
{
"_id" : ObjectId("5e3419e468d01013eadb83dc"),
"id_station" : "62",
"fiware_service" : null,
"fiware_servicepath" : null,
"id_fiware_name" : "CE_del_medio",
"attrName" : "15",
"attrType" : "float",
"attrValue" : 0.33,
"id_sensor_station_absolute" : "15_62",
"recvTimeTs" : 1580387045,
"recvTime" : "2020-01-30T12:24:05.00Z",
"id_fiware" : "15",
"sensor_type" : [
{
"name" : "id",
"type" : "String",
"value" : "15"
},
{
"name" : "img",
"type" : "String",
"value" : "assets/img/contrast.png"
},
{
"name" : "manufacturer",
"type" : "String",
"value" : "Hortisis"
},
{
"name" : "medida",
"type" : "String",
"value" : "mS/cm"
},
{
"name" : "name_comun",
"type" : "String",
"value" : "CE del medio"
},
{
"name" : "place",
"type" : "String",
"value" : "interior"
},
{
"name" : "timestamp",
"type" : "DateTime",
"value" : "2020-01-30T12:24:05.00Z"
},
{
"name" : "type",
"type" : "String",
"value" : "fertigation"
}
]
}
I need to convert the sensor_type field to an array with only one object, as follows:
{
"_id":"15_62",
"medidas":[
{
"_id":"5e3419e468d01013eadb83dc",
"marca":"Hortisis",
"modelo":"Estacion",
"fabricante":"Hortisis",
"id_station":"15",
"sensor_type":[
{
"name":"15",
"type":"fertigation",
"place":"interior",
"img":"assets/img/contrast.png",
"name_comun":"Temp. Suelo",
"medida":"mS/cm"
}
],
"attrName":"15",
"attrValue":0.33,
"recvTimeTs":1580387045,
"recvTime":"2020-01-30T12:24:05.00Z",
"id_sensor_station_absolute":"15_62"
}
]
}
As you can really see it is formatting the sensor_type field = name : value.
I'm working with NODEJS and mongoose.
This is my query: (first I search, sort, only show the first value and then with the project I give format, the problem is that I don't know how to tell the project to put that format if I put "sensor_type": "$latest.attributes.name") it only shows the names and I don't know how to put it in the mentioned format.
Datagreenhouse.aggregate([
{ "$match": { "id_sensor_station_absolute": { "$in": array3 } } }, // "id_station": { "$in": id_station },
{ "$sort": { "recvTime": -1 } },
{
"$group": {
"_id": "$id_sensor_station_absolute",
"latest": { "$first": "$$ROOT" },
}
},
{
"$project": {
"_id": 1,
"id_station": "$latest.id_station",
//"id_sensor_station_absolute": "$id_sensor_station_absolute",
"attrName": "$latest.attrName",
"attrValue": "$latest.attrValue",
"recvTimeTs": "$latest.recvTimeTs",
"recvTime": "$latest.recvTime",
"id_sensor_station_absolute": "$latest.id_sensor_station_absolute",
"sensor_type": "$latest.attributes",
"name": { $arrayElemAt: ["$latest.attributes", 0] },
"type": { $arrayElemAt: ["$latest.attributes", 1] },
"place": { $arrayElemAt: ["$latest.attributes", 2] },
"img": { $arrayElemAt: ["$latest.attributes", 1] },
"name_comun": { $arrayElemAt: ["$latest.attributes", 4] },
"medida": { $arrayElemAt: ["$latest.attributes", 3] },
"interfaz": { $arrayElemAt: ["$latest.attributes", 6] },
}
}
], (err, DatagreenhouseRecuperado) => {
if (err) return res.status(500).send({ message: 'Error al realizar la peticion' + err })
if (!DatagreenhouseRecuperado) return res.status(404).send({ message: 'Error el usuario no existe' })
res.status(200).send({ DatagreenhouseRecuperado })
})
Thank you for your help. Best regards.
Since version 3.4.4, MongoDB introduced a magnific operator: $arrayToObject
This operator allows us transmute array key:value pair into object.
Syntax
RAW DATA $map $arrayToObject
sensor_type : [ sensor_type : [ sensor_type : {
{ \ { \
"name" : "manufacturer", ----> k: "manufacturer", --->
"type" : "String", / v: "Hortisis" / "manufacturer" : "Hortisis"
"value" : "Hortisis"
} }
] ] }
db.datagreenhouses.aggregate([
{
"$match": {} // setup your match criteria
},
{
"$sort": {
"recvTime": -1
}
},
{
$group: {
_id: "$id_sensor_station_absolute",
medidas: {
$push: {
_id: "$_id",
"marca": "Hortisis", // don't know where you get this value
"modelo": "Estacion", // don't know where you get this value
"id_station": "$id_station",
"attrName": "$attrName",
"attrValue": "$attrValue",
"recvTimeTs": "$recvTimeTs",
"recvTime": "$recvTime",
"id_sensor_station_absolute": "$id_sensor_station_absolute",
"sensor_type": {
$arrayToObject: {
$map: {
input: "$sensor_type",
in: {
k: "$$this.name",
v: "$$this.value"
}
}
}
}
}
}
}
}
])
MongoPlayground
[
{
"_id": "15_62",
"medidas": [
{
"_id": ObjectId("5e3419e468d01013eadb83dc"),
"attrName": "15",
"attrValue": 0.33,
"id_sensor_station_absolute": "15_62",
"id_station": "62",
"marca": "Hortisis",
"modelo": "Estacion",
"recvTime": "2020-01-30T12:24:05.00Z",
"recvTimeTs": 1.580387045e+09,
"sensor_type": {
"id": "15",
"img": "assets/img/contrast.png",
"manufacturer": "Hortisis",
"medida": "mS/cm",
"name_comun": "CE del medio",
"place": "interior",
"timestamp": "2020-01-30T12:24:05.00Z",
"type": "fertigation"
}
}
]
}
]
All you need to do is transform data to the desired result with an easy to handle object ($unwind medidas field, transform and then $group again)
Note: If your MongoDB is earlier 3.4.4 version, follow update procedure:
Install MongoDB 3.4.4 or newer
Make mongodump with new version MongoBD
Stop old MongoBD
Remove /data directory (make backup)
Start new MongoDB and run mongorestore
Mongo query generated out of java code:
{
"pipeline": [{
"$match": {
"Id": "09cd9a5a-85c5-4948-808b-20a52d92381a"
}
},
{
"$group": {
"_id": "$result",
"id": {
"$first": "$result"
},
"labelKey": {
"$first": {
"$ifNull": ["$result",
"$result"]
}
},
"value": {
"$sum": 1
}
}
}]
}
Field 'result' can have values like Approved, Rejected, null and "" (empty string). What I am trying to achieve is combining the count of both null and empty together.
So that the empty string Id will have the count of both null and "", which is equal to 4
I'm sure theres a more "proper" way but this is what i could quickly come up with:
[
{
"$group" : {
"_id" : "$result",
"id" : {
"$first" : "$result"
},
"labelKey" : {
"$first" : {
"$ifNull" : [
"$result",
"$result"
]
}
},
"value" : {
"$sum" : 1.0
}
}
},
{
"$group" : {
"_id" : {
"$cond" : [{
$or: [
{"$eq": ["$_id", "Approved"]},
{"$eq": ["$_id", "Rejected"]},
]}},
"$_id",
""
]
},
"temp" : {
"$push" : {
"_id" : "$_id",
"labelKey" : "$labelKey"
}
},
"count" : {
"$sum" : "$value"
}
}
},
{
"$unwind" : "$temp"
},
{
"$project" : {
"_id" : "$temp._id",
"labelKey": "$temp.labelKey",
"count" : "$count"
}
}
],
);
Due to the fact the second group is only on 4 documents tops i don't feel too bad about doing this.
I have used $facet.
The MongoDB stage $facet lets you run several independent pipelines within the stage of a pipeline, all using the same data. This means that you can run several aggregations with the same preliminary stages, and successive stages.
var queries = [{
"$match": {
"Id": "09cd9a5a-85c5-4948-808b-20a52d92381a"
}
},{
$facet: {//
"empty": [
{
$match : {
result : { $in : ['',null]}
}
},{
"$group" : {
"_id" : null,
value : { $sum : 1}
}
}
],
"non_empty": [
{
$match : {
result : { $nin : ['',null]}
}
},{
"$group" : {
"_id" : '$result',
value : { $sum : 1}
}
}
]
}
},
{
$project: {
results: {
$concatArrays: [ "$empty", "$non_empty" ]
}
}
}];
Output :
{
"results": [{
"_id": null,
"value": 52 // count of both '' and null.
}, {
"_id": "Approved",
"value": 83
}, {
"_id": "Rejected",
"value": 3661
}]
}
Changing the group by like below solved the problem
{
"$group": {
"_id": {
"$ifNull": ["$result", ""]
},
"id": {
"$first": "$result"
},
"labelKey": {
"$first": {
"$ifNull": ["$result",
"$result"]
}
},
"value": {
"$sum": 1
}
}
}
I have some documents like this:
{
"hash": "14a076f9f6cecfc58339330eeb492e267f63062f6d5f669c7cdbfecf9eb4de32",
"started_services": [],
"deleted_files": [],
"software": {
"adobe" : {
"licenses" : [
{ "key": "2384723",
"date": "26-10-2012"
},
{ "key": "23888823",
"date": "09-11-2012"
}
]
}
}
}
How do I retrieve just the hash value and the list of "key" values?
I did the following, but, as you see, the result has the entire path which I do not want.
> db.repository.find({"$and": [{"datetime_int": {"$gte": 1451952000}},{"software.adobe.licenses.key" : { $exists : true}}]}, {hash:1, "software.adobe.licenses.key":1, _id:0}).limit(10)
{ "hash" : "a1532e0609aaf6acfa9e505e93af0bee0856a9a67398aeaa72aa6eb2fffd134e", "software" : { "adobe" : { "licenses" : [ { "key" : "2008350" }, { "key" : "2018350" }, { "key" : "2028350" }, { "key" : "2038350" }, { "key" : "2048350" }, { "key" : "2058350" }, { "key" : "2068350" }, { "key" : "2078350" }...]}}}
The result I want should look like this:
{"hash": "a1532e0609aaf6acfa9e505e93af0bee0856a9a67398aeaa72aa6eb2fffd134e",
"key": ["2008350", "2018350", "2028350", "2038350", "2048350", "2058350", "2068350", "2078350"]
}
How do I do that?
You can do this with the aggregation framework.
db.repository.aggregate([
{ "$match": {
"datetime_int": { "$gte": 1451952000 },
"software.adobe.licenses.key" : { "$exists" : true }
}},
{ "$project": {
"hash": 1,
"key": {
"$map": {
"input": "$software.adobe.licenses",
"as": "soft",
"in": "$$soft.key"
}
}
}}
])
Starting From MongoDB 3.2 you can directly project the sub-document array field.
{ "$project": { "hash": 1, "key": "$software.adobe.licenses.key"}}
db.key.aggregate((
{ "$match": {
"datetime_int": { "$gte": 1451952000 }
}},
{"$unwind":"$software.adobe.licenses"},
{"$project":{"key":"$software.adobe.licenses.key", "hash":1, "_id":0}}
))
outputs the following :
{ "hash" : "14a076f9f6cecfc58339330eeb492e267f63062f6d5f669c7cdbfecf9eb4de32", "key" : [ "2384723", "23888823" ] }