1つの別個のフィールドを持ったままドキュメント全体を返すクエリを書くのに問題があります。 私はすでに集約を混乱させようとしましたが、役に立たなかった。別のフィールドと1つの選択クエリでMongoDBのドキュメント全体を返す
How to efficiently perform "distinct" with multiple keys?
は、それは私が必要なソリューションのほとんどを説明したが、私は同様に別のフィールドにフィルタを適用する必要があります:私はすでにいくつかの時間をグーグル後、この文書を発見しました。
これは私がTempCollection内のドキュメントのソートされたリストを照会するために今使用する関数です。
function getLatestUserData(UserID, callback) {
console.log("in func " + UserID);
Temp.find({ UId: UserID }).sort({ "created_at" : -1 }).exec(function (err, data) {
console.log(data + " " + err);
callback(data);
});
};
しかし、どのようにフィルタリング、並べ替え、別個のすべてを同時に行うことができないのか分かりません。
しかしこれは、かなりの時間のための記事を読んで、私はちょうど私が必要とするために、構文を把握することはできません、集約を使用しての試みである:ここでは
function getLatestUserData(UserID, callback) {
Temp.aggregate([
{"$group": { "_id": { value: "$value", SerialNumber: "$SerialNumber" } }},
{$filter : {input: "$UId", as: "UId", cond: {$U: [ "$UId", UserID ]} }}
]).exec(function (err, data) {
callback(data);
});
};
はTempCollectionの一部です。 :
/* 1 */
{
"updatedAt" : ISODate("2017-05-23T13:01:45.000Z"),
"created_at" : ISODate("2017-05-23T13:01:45.000Z"),
"UId" : "590b10221da091b2618a4913",
"value" : 36,
"SerialNumber" : "TEST2",
"_id" : ObjectId("592432b9372464833d038b80"),
"__v" : 0
}
/* 2 */
{
"updatedAt" : ISODate("2017-05-23T14:23:39.000Z"),
"created_at" : ISODate("2017-05-23T14:23:39.000Z"),
"UId" : "58f8954c3602b80552b6f1fb",
"value" : 39,
"SerialNumber" : "IIOJOIMJ",
"_id" : ObjectId("592445eb372464833d038bf4"),
"__v" : 0
}
ご協力いただきありがとうございます。最新の文書全体を選択する$first
蓄積オペレータの内側$$ROOT
変数を使用している間
[Mongooseの異なる値をクエリするにはどのようにしてドキュメントをすべて返すのですか?](https://stackoverflow.com/questions/43895084/how-do-i-query-for-distinct-values -in-mongoose-but-return-all-the-doc) – Veeram
リンクされたdupsから '$ match'と' $ sort'ステージの後に '$ group'を' $$ ROOT'で追加する必要があります。 – Veeram
@Veeramそれから彼らに答えを与えてください。質問には '$ filter'と表示されているので、[パイプライン集計ステージ](https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/)との違いを一般的な演算子に示すと便利です –