このスレッドの問題を 2 つの言葉で知りたい場合: 私はマングース関数 findOrAdd() を実行しようとしています: 探している Id が存在しない場合は、新しいドキュメントを追加する必要があります。その後 (そのため、いくつかの同期関数が必要です)、新しい ObjectIds に基づいて別のクエリを実行する必要があります。
これは私の投稿スキーマです
var com_post_schema = new Schema({
content: { type: String, required: true },
postedBy: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'com_user'
}]
});
と私のユーザースキーマ
var com_user_schema = new Schema({
name: { type: String, required: true },
age: {type:Number}
});
したがって、投稿には複数の作成者が含まれる場合があります。私の問題: 作成者は、既存のユーザー (bootstrap-tokenfield で選択) または新しいユーザーにすることができます。次の json の例を参照してください。
{
"content":"post content",
"postedBy":[
{
"_id":"56a60a972b70225014753d1a",
"name":"Paul",
"age":20,
"__v":0,
"value":"Paul",
"label":"Paul"
},
{
"value":"John",
"label":"John"
}
]
}
ユーザー Paul は既に 'com_user' コレクションに存在します。ユーザー John を 'com_user' に保存してから、両方のユーザー ObjectIds refs (フィールド 'value' と 'label' は bootstrap-tokenfield によって送信されます) を使用して投稿を保存する必要があります。 . どうすればそれができるかわかりません。
編集 これは私の現在のコードです。まだ同期の問題があります。いくつかのテストを行ったところ、コンソールに「新しい投稿が追加されました」と「ユーザーが見つかりません..」がランダムに表示されます。
3 人のユーザーで試してみてください。
app.post('/api/community/posts', function(req,res){
var arr=[],i=0;
req.body.postedBy.forEach(function(el){
com_user.findById(el._id, function (err, user) {
if(user) {
console.log("User found!");
console.log(user);
arr.push(mongoose.Types.ObjectId(user._id ));
i++;
if(i==req.body.postedBy.length-1) {
console.log('UFi'+i)
console.log(arr)
var com_post1= new com_post({
content:req.body.content,
postedBy:arr,
});
com_post1.save(function(err){
if(!err){
console.log("New post added!");
res.json({"New post added! ":req.body.content});
}
else {
res.json({"Error adding post":'error'});
error(err)
}
});
}
}
else {
var com_user1= new com_user({
name:el.label,
age: 20
});
com_user1.save(function(err,newuser){
if(err)
console.log(err)
else {
console.log('User not found and just added!');
console.log(newuser)
arr.push(mongoose.Types.ObjectId(newuser._id));
console.log(arr)
i++;
if(i==req.body.postedBy.length-1) {
console.log('NUFi'+i)
console.log(arr)
var com_post1= new com_post({
content:req.body.content,
postedBy:arr,
});
com_post1.save(function(err){
if(!err){
console.log("New post added!");
res.json({"New post added! ":req.body.content});
}
else {
res.json({"Error adding post":'error'});
error(err)
}
});
}
}
});
}
});
});
});