Angularjs 如果使用自定义id在mongoDB中插入记录,则无法通过findOne()获取记录
因此,我使用Angularjs 如果使用自定义id在mongoDB中插入记录,则无法通过findOne()获取记录,angularjs,node.js,mongodb,express,Angularjs,Node.js,Mongodb,Express,因此,我使用 >db.records.insert({u id:“6”,“name:“Ashish”,“City:“Dallas”}) 当我试图使用 我得到以下回应: [{"name":"Chris","City":"New York"},{"name":"Ashish","City":"Dallas"},{"_id":"5a832ac77ffc3c4e149be718","name":"Sarthak","City":"New York"},{"_id":"5a833071e0184c27ff
>db.records.insert({u id:“6”,“name:“Ashish”,“City:“Dallas”})
当我试图使用
我得到以下回应:
[{"name":"Chris","City":"New York"},{"name":"Ashish","City":"Dallas"},{"_id":"5a832ac77ffc3c4e149be718","name":"Sarthak","City":"New York"},{"_id":"5a833071e0184c27ff514c6f","number":"6","name":"Ashish","City":"Dallas"}]
注意某些记录有_id字段,而其他记录没有。没有_id字段的记录是使用db.records.insert()
命令插入的记录。此外,如果我尝试获取这些自定义输入的记录,则会出现如下错误:
尝试使用I get获取id为6的记录时:
{“message”:“Cast to ObjectId”对于模型“records\”、“name”:“CastError”、“stringValue”:“6\”、“kind”:“ObjectId”、“value”:“6”、“path”:“u id”}的路径处的值“6\”未能转换为ObjectId
作为错误响应。我在app.js中使用以下代码获取记录:
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/testing');
var Employee = mongoose.model('records',mongoose.Schema({
name:String,
City:String,
}));
var cfenv = require("cfenv");
var appEnv = cfenv.getAppEnv();
var port = appEnv.port || 6016;
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
app.use(express.static(__dirname));
app.get('/api/employees',function(req,res){
Employee.find(function(err,employees){
if(err)
return res.send(err);
return res.json(employees);
});
});
app.get('/api/employees/:id',function(req,res){
Employee.findOne({_id: req.params.id},function(err,employees){
if(err)
return res.send(err);
return res.json(employees);
});
});
app.listen(port, function() {
console.log('server starting on ' + port);
});
数据库中的字段,如compass tool中所示:
有什么想法吗?默认情况下,
mongoose
库正在尝试将所有\u id
值转换为mongoose.Types.ObjectId
。如果转换失败,它似乎会忽略该值。在您的情况下,最安全的可能是定义mongoose
如何处理模式中的\u id
字段
var Employee = mongoose.model('records',mongoose.Schema({
_id: String,
name:String,
City:String,
}));
你为什么要告诉mongo文档的
\u id
?让mongo为你做一个。如果不指定\u id
,则它将是一个特殊、唯一的标识值。请参见:。我猜猫鼬会过滤\u id
,如果它是ObjectId
类型。实际上,我想我可能看到了一些错误。尝试用true
/false
在模式中指示您不想要\u id
。请看这篇文章:。但这实际上是一项要求。我需要用自定义ID映射文档,而不是一些任意定义的ID。这就造成了整个问题。因此,我需要删除现有的db
架构,并使用此选项创建一个新架构?您也可以使用自己的id
字段来尝试覆盖\u id
。您可以使用{u id:0}
过滤掉mongo在投影步骤中跟踪的内部\u id
。看见