我在使用貓鼬更新資料庫中的資料時遇到了一些問題,因此提前感謝您的幫助。
我一直在從包含不同欄位集的動態表單中發送一些資料......但是當我更新資料庫中的陣列時,它會更改這些欄位。
這是我之前的控制器功能:-
exports.savePageContent = (req, res, next) => {
const id = req.body.dest; // getting page data document id
delete req.body.dest;
var arr = [];
// When we are returning the same page each time after we submit the data for the particuklar section form then how are we supposed to redirect the user to next page once he is done doing all
var fieldKeys = Object.keys(req.body);
for(let i = 0; i < fieldKeys.length; i )
{
arr.push({fieldRef : fieldKeys[i], fieldValue : req.body[fieldKeys[i]]});
}
pageDataModel.findByIdAndUpdate(id, {pageData : arr}).exec(function(err, result) {
if(err){
console.log(err);
}
else {
console.log("data is inserted");
req.flash('message', "Data Saved Successfully");
}
})
}
我也嘗試了一些更新,然后移到這部分
這是我的新控制器功能:
exports.savePageContent = (req, res, next) => {
const pageid = req.body.dest; // getting page data document id
delete req.body.dest;
var fieldRefData = "";
var fieldValueData = "";
var fieldKeys = Object.keys(req.body);
for(let i = 0; i < fieldKeys.length; i )
{
fieldRefData = fieldKeys[i];
fieldValueData = req.body[fieldKeys[i]];
try{
pageDataModel.update({id : pageid, "pageData.fieldRef" : fieldRefData}, {$set : {"pageData.$.fieldValue" : fieldValueData }}, {upsert : true}).exec(function(err, result) {
if(err){
console.log(err);
}
else {
console.log("data is inserted", result);
}
});
req.flash('message', "Data Saved Successfully");
}catch(e){
console.log(e);
req.flash('message', "error Occurred updating Data ");
}
}
}
為了詳細說明案例以便更好地理解:-
這是體內第一次出現的資料
[
{ fieldRef: 'sec1.1.h1', fieldValue: 'this is the field value 1' },
{ fieldRef: 'sec1.1.p', fieldValue: 'this is the field value 1' },
{ fieldRef: 'sec1.1.a', fieldValue: 'this is the field value 1' },
{ fieldRef: 'sec1.2.h2', fieldValue: 'this is the field value 1' }
]
這是第二次出現的資料:-
[
{ fieldRef: 'sec2.1.h1', fieldValue: 'this the field value 2' },
{ fieldRef: 'sec2.1.p', fieldValue: 'this the field value 2' },
{ fieldRef: 'sec2.1.a', fieldValue: 'this the field value 2' },
{ fieldRef: 'sec2.2.h1', fieldValue: 'this the field value 2' }
]
當我想要兩個資料都在資料庫中但是當我發送一個第二個資料時,第一個資料會更新為第二個資料,反之亦然..
這是場景的資料庫影像
這是第一次操作時檔案中的資料
這是第二次操作檔案中的資料
我無法同時保留和更新它們...所以請幫助我...
這是我大部分時間都遇到的錯誤,表示查詢錯誤
MongoServerError: The positional operator did not find the match needed from the query.
at /home/pushkar/Desktop/NodejsWebApp1/node_modules/mongodb/lib/operations/update.js:80:33
at /home/pushkar/Desktop/NodejsWebApp1/node_modules/mongodb/lib/cmap/connection_pool.js:272:25
at handleOperationResult (/home/pushkar/Desktop/NodejsWebApp1/node_modules/mongodb/lib/sdam/server.js:370:9)
at MessageStream.messageHandler (/home/pushkar/Desktop/NodejsWebApp1/node_modules/mongodb/lib/cmap/connection.js:479:9)
at MessageStream.emit (events.js:400:28)
at processIncomingData (/home/pushkar/Desktop/NodejsWebApp1/node_modules/mongodb/lib/cmap/message_stream.js:108:16)
at MessageStream._write (/home/pushkar/Desktop/NodejsWebApp1/node_modules/mongodb/lib/cmap/message_stream.js:28:9)
at writeOrBuffer (internal/streams/writable.js:358:12)
at MessageStream.Writable.write (internal/streams/writable.js:303:10)
at Socket.ondata (internal/streams/readable.js:731:22) {
index: 0,
code: 2
}
另外,如果我無法清楚地說明我的情況,請發表評論,我會嘗試更清楚地解釋它.. 提前謝謝
uj5u.com熱心網友回復:
$set將替換鍵的新值。如果您使用第三個值,那么$set將替換第三個值,使用$push而不是$set運算子。https://docs.mongodb.com/manual/reference/operator/update/push/
uj5u.com熱心網友回復:
嘗試使用_id而不是id.
pageDataModel.update({_id : pageid, "pageData.fieldRef"}) {
甚至pageData._id代替id.
pageDataModel.update({'pageData._id' : pageid, "pageData.fieldRef"}) {
此外,您的 idstring在查詢中是一個,但object id在資料庫中,所以呼叫一個助手。
pageDataModel.update({'pageData._id' : mongoose.Types.ObjectId(pageid), "pageData.fieldRef"}) {
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/411681.html
標籤:
