私はウェブサイトに記事を登録するために使用できるシンプルなフォームを使用しています。MongoDB mongooseサブ文書を2回作成
バックエンドは、次のようになります。
// Post new article
app.post("/articles", function(req, res){
var newArticle = {};
newArticle.title = req.body.title;
newArticle.description = req.body.description;
var date = req.body.date;
var split = date.split("/");
newArticle.date = split[1]+'/'+split[0]+'/'+split[2];
newArticle.link = req.body.link;
newArticle.body = req.body.body;
var platforms = req.body.platforms;
console.log(platforms);
Article.create(newArticle, function(err, createdArticle){
if(err){
console.log(err.message);
} else {
var counter=0;
platforms.forEach(function(platform){
var platformed=mongoose.mongo.ObjectID(platform);
Platform.findById(platformed, function(err, foundPlatform){
if(err){
console.log(err);
} else {
counter++;
foundPlatform.articles.push(createdArticle);
foundPlatform.save();
createdArticle.platforms.push(foundPlatform);
createdArticle.save();
if(counter==platforms.length){
res.redirect('articles/' + createdArticle._id);
}
}
});
});
}
});
});
プラットフォームフィールドは、文字列の配列、1オブジェクトIDである1つの文字列としてバックエンドに渡されます。プラットフォームに1つの文字列、つまりリンク先のプラットフォームが1つしかない場合は、すべて正常に動作します。プラットフォームに複数の文字列が含まれている場合。作成された記事には各プラットフォームの重複があります。または時には一部のプラットフォームの複製のみ
アイデア?
更新1: 記事スキーマ: var mongoose = require( "mongoose");
var articleSchema = new mongoose.Schema({
title : String,
description : String,
link : String,
date : String,
body : String,
platforms : [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Platform"
}
]
})
module.exports = mongoose.model("Article", articleSchema);
プラットフォームスキーマ:
var mongoose = require("mongoose");
var platformSchema = new mongoose.Schema({
name : String,
category : String,
contacts : [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Contact"
}
],
website : String,
country : String,
contactInformation : String,
businessModelNotes : String,
source : String,
generalNotes : String,
projects : [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Project"
}
],
articles : [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Article"
}
],
privacy : String,
comments : [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Comment"
}
]
});
module.exports = mongoose.model("Platform", platformSchema);
[編集]私たちに 'Article'と' Platform'モデルのスキーマ定義を表示するには、あなたの質問することができますか?私はあなたがループ内で非同期呼び出しを行っているのを見ることができます。これは重複をなぜ取得しているのかを説明するかもしれません。 – chridam
更新されました! @chridam –