|
I was working with mongo db on my project for quite some time using test pre-generated data, until i insert this record, and i found something strange, the data returned in middle of list...?
shouldn't it be sorted? shouldn't it comes last or first? in inserted order... after some search i found that the data my return in any order and i need to sort it...
so i did the sorting at one of beginning stage, before $lookup, but still it was wrong, i move it to last, and it worked, so i push sort down stage by stage, until i caught it causing trouble at one of the middle stages, right before $group stage...
but the issue is not grouping, it is that i group by _id... fixing one of my issue that you may had another answer for it, but i did it this way... and now i found $group guilty.
In trivial way, the _id is one (I mean there is no duplication version), and it scan in order, shouldn't it result in order too?
Generated by Studio 3T
// Requires official MongoShell 3.6+
|
use realEstate;
|
db.getCollection("basePlace").aggregate(
|
[
|
{
|
"$lookup" : {
|
"from" : "humanResource.user",
|
"localField" : "UserId",
|
"foreignField" : "_id",
|
"as" : "User"
|
}
|
},
|
{
|
"$unwind" : {
|
"path" : "$User",
|
"preserveNullAndEmptyArrays" : true
|
}
|
},
|
{
|
"$addFields" : {
|
"User.ProfilePictures" : {
|
"$map" : {
|
"input" : "$User.ProfilePictures",
|
"as" : "pp",
|
"in" : {
|
"ImageId" : "$$pp.ImageId",
|
"CloudinaryUrl" : "$$pp.CloudinarySecureUrl",
|
"IsMain" : "$$pp.IsMain",
|
"Title" : "$$pp.Title",
|
"Description" : "$pp.Description"
|
}
|
}
|
},
|
"Images" : {
|
"$map" : {
|
"input" : "$Images",
|
"as" : "pp",
|
"in" : {
|
"ImageId" : "$$pp.ImageId",
|
"CloudinaryUrl" : "$$pp.CloudinarySecureUrl",
|
"IsMain" : "$$pp.IsMain",
|
"Title" : "$$pp.Title",
|
"Description" : "$pp.Description"
|
}
|
}
|
},
|
"Maps" : {
|
"$map" : {
|
"input" : "$Maps",
|
"as" : "pp",
|
"in" : {
|
"ImageId" : "$$pp.ImageId",
|
"CloudinaryUrl" : "$$pp.CloudinarySecureUrl",
|
"IsMain" : "$$pp.IsMain",
|
"Title" : "$$pp.Title",
|
"Description" : "$pp.Description"
|
}
|
}
|
}
|
}
|
},
|
{
|
"$addFields" : {
|
"User.ProfilePictures" : {
|
"$cond" : [
|
{
|
"$and" : [
|
{
|
"$ne" : [
|
"User.ProfilePictures",
|
undefined
|
]
|
},
|
{
|
"$ne" : [
|
"User.ProfilePictures",
|
null
|
]
|
}
|
]
|
},
|
{
|
"$cond" : [
|
{
|
"$ne" : [
|
{
|
"$indexOfArray" : [
|
"$User.ProfilePictures.IsMain",
|
true
|
]
|
},
|
-1.0
|
]
|
},
|
{
|
"$arrayElemAt" : [
|
"$User.ProfilePictures",
|
{
|
"$indexOfArray" : [
|
"$User.ProfilePictures.IsMain",
|
true
|
]
|
}
|
]
|
},
|
{
|
"$arrayElemAt" : [
|
"$User.ProfilePictures",
|
0.0
|
]
|
}
|
]
|
},
|
null
|
]
|
},
|
"Images" : {
|
"$cond" : [
|
{
|
"$and" : [
|
{
|
"$ne" : [
|
"Images",
|
undefined
|
]
|
},
|
{
|
"$ne" : [
|
"Images",
|
null
|
]
|
}
|
]
|
},
|
{
|
"$cond" : [
|
{
|
"$ne" : [
|
{
|
"$indexOfArray" : [
|
"$Images.IsMain",
|
true
|
]
|
},
|
-1.0
|
]
|
},
|
{
|
"$arrayElemAt" : [
|
"$Images",
|
{
|
"$indexOfArray" : [
|
"$Images.IsMain",
|
true
|
]
|
}
|
]
|
},
|
{
|
"$arrayElemAt" : [
|
"$Images",
|
0.0
|
]
|
}
|
]
|
},
|
null
|
]
|
},
|
"Maps" : {
|
"$cond" : [
|
{
|
"$and" : [
|
{
|
"$ne" : [
|
"Maps",
|
undefined
|
]
|
},
|
{
|
"$ne" : [
|
"Maps",
|
null
|
]
|
}
|
]
|
},
|
{
|
"$cond" : [
|
{
|
"$ne" : [
|
{
|
"$indexOfArray" : [
|
"$Maps.IsMain",
|
true
|
]
|
},
|
-1.0
|
]
|
},
|
{
|
"$arrayElemAt" : [
|
"$Maps",
|
{
|
"$indexOfArray" : [
|
"$Maps.IsMain",
|
true
|
]
|
}
|
]
|
},
|
{
|
"$arrayElemAt" : [
|
"$Maps",
|
0.0
|
]
|
}
|
]
|
},
|
null
|
]
|
}
|
}
|
},
|
{
|
"$sort" : {
|
"_id" : -1.0
|
}
|
},
|
{
|
"$group" : {
|
"_id" : "$_id",
|
"Images" : {
|
"$push" : "$Images"
|
},
|
"Maps" : {
|
"$push" : "$Maps"
|
},
|
"allData" : {
|
"$first" : "$$ROOT"
|
}
|
}
|
},
|
{
|
"$addFields" : {
|
"allData.Images" : "$Images",
|
"allData.Maps" : "$Maps"
|
}
|
},
|
{
|
"$replaceRoot" : {
|
"newRoot" : "$allData"
|
}
|
}
|
],
|
{
|
"allowDiskUse" : false
|
}
|
);
|
|
|