[解決済み] Mongoose を使って、mongodb から key-value map としてデータを取得する方法はありますか?
2022-02-07 21:47:34
質問
Mongodbコレクションに以下のデータがあります。
{_id: xxx1, fieldA: valueA_1, fieldB: valueB_1, fieldC: valueC_1},
{_id: xxx2, fieldA: valueA_1, fieldB: valueB_2, fieldC: valueC_2},
{_id: xxx3, fieldA: valueA_2, fieldB: valueB_3, fieldC: valueC_3},
このような構造を返すような Mongodb の集約演算子などはないでしょうか。
{
"valueA_1": [
{_id: xxx1, fieldA: valueA_1, fieldB: valueB_1, fieldC: valueC_1},
{_id: xxx2, fieldA: valueA_1, fieldB: valueB_2, fieldC: valueC_2}
],
"valueA_2": [
{_id: xxx3, fieldA: valueA_2, fieldB: valueB_3, fieldC: valueC_3}
]
}
今は単純にSchema.find()をして、その後にreduce関数を結果に適用しています。
data.reduce(function (map, obj) {
map[obj.fieldA] = map[obj.fieldA] ? [...map[obj.fieldA], obj] : [obj];
return map;
}, {});
この動作をmongodbの演算子だけで実現するにはどうしたらいいか知りたいです。 また、reduce関数の代わりにこれらを使用した方がパフォーマンスが良いのかどうか。
皆さん、ありがとうございました。
解決方法は?
これを試してみてください
db.collection.aggregate([
{
$group: { // first group by the required fieldA
_id: "$fieldA",
docs: {
$push: "$$ROOT"
}
}
},
{
$group: { // this group to gather all documents in one array 'allDocsInOneArray' of objects
// each object has a key = the value of fieldA, and a value = an array of the docs belong to this fieldA
_id: null,
allDocsInOneArray: {
$push: {
k: "$_id", // the key of the object (should be the value of fieldA, which is the _id now after the first group stage)
v: "$docs" // an array of docs belong to this fieldA
// the object should be in this format { k: '', v: [] } in order to be able to convert the whole array to another object in $arrayToObject operation
}
}
}
},
{
"$replaceRoot": {
"newRoot": {
"$arrayToObject": "$allDocsInOneArray" // convert the array of objects to object with key = k (fieldA), value = v (its docs)
}
}
}
])
できます テストはこちら
お役に立てれば幸いです。
関連
-
[解決済み】フォームコントロールの値アクセサがない
-
[解決済み】JavaScriptのisset()に相当するもの
-
[解決済み] 解決済み】clearInterval()が動作しない [重複] [重複]
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み] テスト
-
[解決済み】TypeError:res.jsonは関数ではありません。
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー
-
[解決済み] 別のフィールドの値を使って MongoDB のフィールドを更新する
-
[解決済み] 些細なキーの場合、unordered_mapよりもmapを使用する利点はありますか?
-
[解決済み] Mongoose を使って MongoDB ドキュメントからキーを削除する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Facebook Graph API のクエリで with=location を使用すると "Uncaught (in promise) undefined" というエラーが発生する。
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'top' を読み込めない
-
[解決済み] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングした
-
[解決済み】SyntaxError: 'import' と 'export' は 'sourceType: module' とだけ表示されるかもしれない - Gulp
-
[解決済み] [Solved] Uncaught TypeError: nullのプロパティ 'appendChild' を読み取ることができない。
-
[解決済み】Kendo Observable Bindingと併用する場合、Kendo Switch Labelsを変更することは可能ですか?[Kendo-UI]です。
-
[解決済み】PhantomJS 2.1.1を使用してReactJSアプリケーションをレンダリングできない理由とは?
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。
-
[解決済み】module.exports "モジュールが定義されていません"