#model
comments:[{
body:String
}]
#route
router.post('/comment',(req,res)=>{
const postid=req.body.postid;
const body=req.body.body;
const comment ={
"body":body
}
Article.updateMany({ _id: postid }, { $push: { comments: comment }},function(err,test){
if(err){
console.log('err');
}else{
req.flash('success', 'Comment Added');
res.redirect('/articles/house')
}
});
});
#PUG
form.comment-form(method='POST', action='/articles/comment')
input(name='postid', type='hidden', value='#{house._id}')
.form-group
label Body
textarea.form-control(type='text', name='body')
br
input.btn.btn-default(type='submit', name='submit', value='Add Comment')
請問一下 我想要讓評論跟文章存在一起
上網試滿多方法都沒成功
我現在這樣打他都有success 但資料都沒進去 請問是哪邊有問題或是 可以怎麼打呢
鍵盤解題
雖然我沒在用 mongoose
我都是用 monk
不過基本上
_id 應該都不會是純文字
而是 objectid
所以你 query 是
{ _id: postid }
更新沒反應應該就很正常了
然後你的寫法
是沒 error 就會跳成功
所以也很正常
你同樣的 query
試試 find post 有沒有資料就知道了
請問我剛剛試了一下
const _id = mongoose.Types.ObjectId(Article._id);
這樣宣告不過好像還是不行
我用get是有資料的
在 updatemany 中的 callback
把 test 的 三個值印出來
看分別是什麼
剛測了一下
好像不用轉成 objectid 也能正常使用
更新前
{
"_id" : ObjectId("5d75aa41bd6a1ad77408cea6"),
"title" : "A",
"content" : "A content",
"comments" : []
}
index.js
...
router.post('/edit-post', async (req, res) => {
try {
const { postId, comment } = req.body;
const updateResult = await postsModel.updateMany({ _id: postId }, { $push: { comments: comment } });
res.status(200).send({ updateResult }).end();
} catch (err) {
res.status(500).send({ msg: 'Server error' }).end();
}
});
...
post data
{
"postId": "5d75aa41bd6a1ad77408cea6",
"comment": "first comment"
}
result
{
"updateResult": {
"n": 1,
"nModified": 1,
"ok": 1
}
}
更新後
{
"_id" : ObjectId("5d75aa41bd6a1ad77408cea6"),
"title" : "A",
"content" : "A content",
"comments" : [
"first comment"
]
}
{ n: 0,
nModified: 0,
opTime:
{ ts:
Timestamp { _bsontype: 'Timestamp', low_: 45, high_: 1568022605 },
t: 345 },
electionId: 7fffffff0000000000000159,
ok: 1,
operationTime:
Timestamp { _bsontype: 'Timestamp', low_: 45, high_: 1568022605 },
'$clusterTime':
{ clusterTime:
Timestamp { _bsontype: 'Timestamp', low_: 45, high_: 1568022605 },
signature: { hash: [Binary], keyId: [Long] } } }
我照著你的run看看 不過出現一大堆看起來沒成功的訊息
你model裡的comments 是只有一個array
comments:[]
這樣嗎 在想是不是model建的時候就出問題了
你model裡的comments 是只有一個array
comments:[]
檔案不再手邊
不過我印象中是長
const postSchema = new mongoose.Schema({
title: String,
comments: Array,
});
這樣
你上面貼的訊息
nModified: 0
就是沒有資料更新
input(name='postid', type='hidden', value=house._id)
我把pug裡 value='#{house._id}' 改成 value=house._id 就可以了耶
可以問問為什麼嗎 兩個語法的值不是都是這文章的ID嗎
所以你沒有檢查到後端的 data 是否正確嗎
這篇應該完美解釋你的問題
Caution
Previous versions of Pug/Jade supported an interpolation syntax such as:
a(href="/#{url}") Link
This syntax is no longer supported. Alternatives are found below. (Check our migration guide for more information on other incompatibilities between Pug v2 and previous versions.)