db.test.drop();
db.test.insert([{
id: 1,
userId: 1,
review: "only one review",
dateCreated: ISODate("2017-02-23 02:35:11.420Z")
}, {
id: 3,
anonId: 1,
review: "second entered",
dateCreated: ISODate("2017-02-23 02:41:42.300Z")
}, {
id: 2,
userId: 2,
review: "fist enterd",
dateCreated: ISODate("2017-02-23 02:36:32.150Z")
}, {
id: 5,
userId: 3,
review: "fist enterd121212",
dateCreated: ISODate("2017-02-23 02:36:32.150Z")
}])
db.test.aggregate([{
$sort: {
"dateCreated": -1
}
}, {
$project: {
ref: {
$cond: {
if: { $gt: ["$userId", null] },
then: "$userId",
else: "$anonId"
}
},
document: "$$ROOT"
}
}, {
$group: {
_id: "$ref",
document: {
"$first": "$document"
}
}
}])
{ "_id" : 3, "document" : { "_id" : ObjectId("58ae6bf93aa71d40f8906efe"), "id" : 5, "userId" : 3, "review" : "fist enterd121212", "dateCreated" : ISODate("2017-02-23T02:36:32.150Z") } }
{ "_id" : 2, "document" : { "_id" : ObjectId("58ae6bf93aa71d40f8906efd"), "id" : 2, "userId" : 2, "review" : "fist enterd", "dateCreated" : ISODate("2017-02-23T02:36:32.150Z") } }
{ "_id" : 1, "document" : { "_id" : ObjectId("58ae6bf93aa71d40f8906efc"), "id" : 3, "anonId" : 1, "review" : "second entered", "dateCreated" : ISODate("2017-02-23T02:41:42.300Z") } }