マングース101:サブドキュメントの操作
22597 ワード
あなたはどのように基本的なレベルで、作成、読み取り、更新、およびドキュメントを削除するmongooseを使用する方法を学んだprevious tutorial . このチュートリアルでは、サブドキュメントにさらに一歩進みます
マングースにおいては、他の文書にネストした文書がある.スキーマが別のスキーマに入れ子になったときにサブドキュメントを見つけることができます.
注:MongoDBはサブドキュメントを埋め込みドキュメントを呼び出します.
龍という文字を作りたいとしましょう.竜には3つの特別な動きがある. ハドケン 新竜建 辰牧専化学 劉にも一つの究極の動きがある. 申飛憲 我々は、各移動の名前を保存します.また、その移動を実行するために必要なキーを保存します.
ここで、各移動はサブドキュメントである.
サブドキュメントを含むドキュメントを作成するには、次の2つの方法があります. 入れ子になったオブジェクトを 作成されたドキュメントにプロパティを追加します.
このメソッドでは、Loveの名前とその動きの両方を含む入れ子オブジェクトを構築します.
このメソッドでは、
サブドキュメントを更新する最も簡単な方法は以下の通りです. 用途 配列を取得する 配列を変更する ラン 例えば、私たちは
第一に、私たちは
この
単一のサブドキュメントを更新するのも簡単です.通常のオブジェクトのように直接ドキュメントを編集できます.
私たちは龍の究極の名前を新ku HadokenからDejin Hadokenに変えたいと言いましょう.私たちがすることは 用途 変更する ラン
読書ありがとう.この記事はもともと投稿されたmy blog . あなたがより良いフロントエンド開発者になるために、より多くの記事が欲しいならば、私の会報にサインアップしてください.
サブドキュメントとは
マングースにおいては、他の文書にネストした文書がある.スキーマが別のスキーマに入れ子になったときにサブドキュメントを見つけることができます.
注:MongoDBはサブドキュメントを埋め込みドキュメントを呼び出します.
const childSchema = new Schema({
name: String
});
const parentSchema = new Schema({
// Single subdocument
child: childSchema,
// Array of subdocuments
children: [childSchema]
});
実際には、別のを作成する必要はありませんてchildSchema
上記の例のように.マングースは、別のオブジェクトにオブジェクトをネストするときにネストしたスキーマを作成するのに役立ちます.// This code is the same as above
const parentSchema = new Schema({
// Single subdocument
child: { name: String },
// Array of subdocuments
children: [{ name: String }]
});
属性スキーマの更新
龍という文字を作りたいとしましょう.竜には3つの特別な動きがある.
ここで、各移動はサブドキュメントである.
const characterSchema = new Schema({
name: { type: String, unique: true },
// Array of subdocuments
specials: [{
name: String,
keys: String
}]
// Single subdocument
ultimate: {
name: String,
keys: String
}
})
必要に応じてChildSchema構文を使用することもできます.これは、文字スキーマを理解しやすくなります.const moveSchema = new Schema({
name: String,
keys: String
});
const characterSchema = new Schema({
name: { type: String, unique: true },
// Array of subdocuments
specials: [moveSchema],
// Single subdocument
ultimate: moveSchema
});
サブドキュメントを含むドキュメントの作成
サブドキュメントを含むドキュメントを作成するには、次の2つの方法があります.
new Model
方法1 :オブジェクト全体を渡す
このメソッドでは、Loveの名前とその動きの両方を含む入れ子オブジェクトを構築します.
const ryu = {
name: "Ryu",
specials: [
{
name: "Hadoken",
keys: "↓ ↘ → P"
},
{
name: "Shoryuken",
keys: "→ ↓ ↘ → P"
},
{
name: "Tatsumaki Senpukyaku",
keys: "↓ ↙ ← K"
}
],
ultimate: {
name: "Shinku Hadoken",
keys: "↓ ↘ → ↓ ↘ → P"
}
};
そして、このオブジェクトをnew Character
.const char = new Character(ryu);
const doc = await char.save();
console.log(doc);
方法2 :後にサブドキュメントを追加する
このメソッドでは、
new Character
ファースト.const ryu = new Character({ name: "Ryu" });
次に、文字を編集して特殊な動きを追加します.const ryu = new Character({ name: 'Ryu' })
const ryu.specials = [{
name: 'Hadoken',
keys: '↓ ↘ → P'
}, {
name: 'Shoryuken',
keys: '→ ↓ ↘ → P'
}, {
name: 'Tatsumaki Senpukyaku',
keys: '↓ ↙ ← K'
}]
それから、我々は最終的な動きを加えるために性格を編集します:const ryu = new Character({ name: 'Ryu' })
// Adds specials
const ryu.specials = [{
name: 'Hadoken',
keys: '↓ ↘ → P'
}, {
name: 'Shoryuken',
keys: '→ ↓ ↘ → P'
}, {
name: 'Tatsumaki Senpukyaku',
keys: '↓ ↙ ← K'
}]
// Adds ultimate
ryu.ultimate = {
name: 'Shinku Hadoken',
keys: '↓ ↘ → ↓ ↘ → P'
}
一度満足してryu
, 我々は走るsave
.const ryu = new Character({ name: 'Ryu' })
// Adds specials
const ryu.specials = [{
name: 'Hadoken',
keys: '↓ ↘ → P'
}, {
name: 'Shoryuken',
keys: '→ ↓ ↘ → P'
}, {
name: 'Tatsumaki Senpukyaku',
keys: '↓ ↙ ← K'
}]
// Adds ultimate
ryu.ultimate = {
name: 'Shinku Hadoken',
keys: '↓ ↘ → ↓ ↘ → P'
}
const doc = await ryu.save()
console.log(doc)
配列サブドキュメントの更新
サブドキュメントを更新する最も簡単な方法は以下の通りです.
findOne
文書を見つけるsave
Jodan Sokutou Geri
龍の特別な動きに.キーJodan Sokutou Geri
are ↓ ↘ → K
.第一に、私たちは
findOne
.const ryu = await Characters.findOne({ name: "Ryu" });
マングース文書は、通常のJavaScriptオブジェクトのように振る舞う.我々は得ることができますspecials
執筆する配列ryu.specials
.const ryu = await Characters.findOne({ name: "Ryu" });
const specials = ryu.specials;
console.log(specials);
この
specials
arrayは通常のJavaScript配列です.const ryu = await Characters.findOne({ name: "Ryu" });
const specials = ryu.specials;
console.log(Array.isArray(specials)); // true
私たちはpush
新しい項目を追加する方法specials
,const ryu = await Characters.findOne({ name: "Ryu" });
ryu.specials.push({
name: "Jodan Sokutou Geri",
keys: "↓ ↘ → K"
});
更新後specials
, 我々は走るsave
をデータベースに保存します.const ryu = await Characters.findOne({ name: "Ryu" });
ryu.specials.push({
name: "Jodan Sokutou Geri",
keys: "↓ ↘ → K"
});
const updated = await ryu.save();
console.log(updated);
単一のサブドキュメントの更新
単一のサブドキュメントを更新するのも簡単です.通常のオブジェクトのように直接ドキュメントを編集できます.
私たちは龍の究極の名前を新ku HadokenからDejin Hadokenに変えたいと言いましょう.私たちがすることは
findOne
龍を得る.name
インultimate
save
const ryu = await Characters.findOne({ name: "Ryu" });
ryu.ultimate.name = "Dejin Hadoken";
const updated = await ryu.save();
console.log(updated);
読書ありがとう.この記事はもともと投稿されたmy blog . あなたがより良いフロントエンド開発者になるために、より多くの記事が欲しいならば、私の会報にサインアップしてください.
Reference
この問題について(マングース101:サブドキュメントの操作), 我々は、より多くの情報をここで見つけました https://dev.to/zellwk/mongoose-101-working-with-subdocuments-pe2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol