我有一个Node.js应用程序。这是我第一次使用MongoDB。
我尝试插入文档时遇到此异常:
无法分配给只读属性' _id' {" title":"一些标题","内容":"一些内容","标签":& #34; #some#tags"}
这是它出现的代码行:
db.collection(collectionName).insertOne(json, callback);
我听说_id是Mongo应该自己创造的价值。我发现很多问题都有相同的例外,但要么不是_id字段,要么是_id字段,但是在客户端,他们根本没有帮助我。
任何帮助都将深表感谢!
整个代码:
蒙戈-manager.js:
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/blog';
function performOperation (func){
MongoClient.connect(url, function(err, db) {
func(db, function(err, result) {
db.close();
});
});
}
function insertOne(db, collectionName, json, callback){
db.collection(collectionName).insertOne(json, callback);
}
exports.addPost = function(json) {
performOperation(func);
function func (db, callback) {
insertOne(db, "posts", json, callback)
}
};
index.js:
var express = require('express');
var router = express.Router();
router.post('/posts', function(req, res, next){
var mongoManager = require('../dal/mongo-manager.js');
mongoManager.addPost(JSON.stringify(req.body));
});
module.exports = router;
答案 0 :(得分:8)
忽略JSON.stringify
来电并将req.body
传递给addPost
。 insertOne
需要一个对象,而不是字符串。
至于为什么会导致该特定错误消息:insertOne
会将唯一_id
属性添加到作为doc
参数传递的值中,如果它还没有存在,但字符串是只读(不可变)对象,因此它不能向其添加_id
。
答案 1 :(得分:0)
我遇到了类似的问题,因为obj
给出的是string
并且您无法设置strings
这解决了我的问题:
if(window.Prototype) {
delete Object.prototype.toJSON;
delete Array.prototype.toJSON;
delete Hash.prototype.toJSON;
delete String.prototype.toJSON;
}
JS代码是在浏览器上运行的。