Maison > Questions et réponses > le corps du texte
Je vais d'abord présenter le cas pour que tout le monde puisse comprendre ce que je veux dire :
/a/1190000004157112
Le lien ci-dessus est une requête sqlgroup ordinaire, mais le problème que je rencontre maintenant est d'utiliser mongo pour effectuer une requête de groupe
La requête d'agrégation me tue vraiment. Voici les données simulées :
(Veuillez pardonner mes données, il est décomplexé et gratuit)
{
"_id" : ObjectId("590c15751f70bd329f8a972d"),
"_class" : "com.birdnest.model.AppPublish",
"user" : "admin",
"deviceType" : "nurse",
"version" : "1.1。2。2",
"message" : "范德萨312313213213范德萨",
"creation" : ISODate("2017-05-05T06:02:29.300Z")
}
{
"_id" : ObjectId("590c15751f70bd329f8a972e"),
"_class" : "com.birdnest.model.AppPublish",
"user" : "admin",
"deviceType" : "nurse",
"version" : "1.1。2。2",
"message" : "范德萨312313213213范德萨",
"creation" : ISODate("2017-05-05T06:02:29.447Z")
}
{
"_id" : ObjectId("590c157b1f70bd329f8a972f"),
"_class" : "com.birdnest.model.AppPublish",
"user" : "admin",
"deviceType" : "bed",
"version" : "1.1。2。2",
"message" : "范1123德萨312313213213范德萨",
"creation" : ISODate("2017-05-05T06:02:35.731Z")
}
{
"_id" : ObjectId("590c157c1f70bd329f8a9730"),
"_class" : "com.birdnest.model.AppPublish",
"user" : "admin",
"deviceType" : "bed",
"version" : "1.1。2。2",
"message" : "范1123德萨312313213213范德萨",
"creation" : ISODate("2017-05-05T06:02:36.164Z")
}
{
"_id" : ObjectId("590c158a1f70bd329f8a9733"),
"_class" : "com.birdnest.model.AppPublish",
"user" : "admin",
"deviceType" : "room",
"version" : "1.1.112",
"message" : "范1123德萨312313213213范德萨",
"creation" : ISODate("2017-05-05T06:02:50.082Z")
}
{
"_id" : ObjectId("590c158a1f70bd329f8a9734"),
"_class" : "com.birdnest.model.AppPublish",
"user" : "admin",
"deviceType" : "room",
"version" : "1.1.112",
"message" : "范1123德萨312313213213范德萨",
"creation" : ISODate("2017-05-05T06:02:50.238Z")
}
Les exigences sont les suivantes
Classez selon le type d'appareil et obtenez le dernier numéro de version de chaque catégorie
Le résultat que je veux est comme ça
/* 1 */
{
"deviceType" : "bed",
"version" :"1.1.112")
}
/* 2 */
{
"deviceType" : "room",
"version" :"1.1.112")
}
/* 3 */
{
"deviceType" : "nurse",
"version" : "1.1.112")
}
La déclaration suivante a été écrite par moi-même, mais il y a de nombreux problèmes
Bien que j'aie fait ce que j'ai écrit, le résultat souhaité n'a pas pu être affiché
db.appPublish.aggregate(
{$group : {_id :"$deviceType",creation : {$max : "$creation"}}}
);
1._id ne peut pas être mappé à un objet
2.version ne peut pas être écrit en groupe
Je ne comprends vraiment pas cette syntaxe
Le résultat
/* 1 */
{
"_id" : "bed",
"creation" : ISODate("2017-05-05T06:02:44.750Z")
}
/* 2 */
{
"_id" : "room",
"creation" : ISODate("2017-05-05T06:02:50.397Z")
}
/* 3 */
{
"_id" : "nurse",
"creation" : ISODate("2017-05-05T06:02:29.447Z")
}
某草草2017-05-17 10:04:55
_id
n'est bien sûr pas mappé au vrai _id
. Le _id
fait ici référence à la clé du group
.
Je ne sais pas quelle est la relation entre votre version
et votre création
création
Un document relativement volumineux doit être version.
Est-ce relativement nouveau ? Si cette condition est vraie, vous pouvez faire ceci : _id
当然映射不到真正的_id
上,这里的_id
指的是group
的key。
不清楚你的version
和creation
是什么关系,creation
比较大的文档version
一定是比较新吗?如果这个条件成立的话,可以这样做:
db.question.aggregate([
{$sort: {creation: -1}},
{$group : {_id :"$deviceType", version : {$first : "$version"}}},
{$project: {deviceType: "$_id", version: "$version"}}
]);
$first
即group
之后取第一个元素。而事先已经按creation
rrreee
$first
est le premier élément après group
. Les éléments ont été triés par création
à l'avance, le premier est donc le dernier élément. 🎜