【发布时间】:2018-07-24 05:24:20
【问题描述】:
所以我使用
在我的 mongoDB 架构中插入了记录> db.records.insert( { _id: "6", "name": "Ashish", "City": "Dallas" } )
当我尝试使用 http://localhost:6001/api/employees/ 获取它们时 我得到以下回复:
[{"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() 命令插入的记录。另外,如果我尝试获取那些自定义输入的记录,我会收到如下错误:
在尝试使用http://localhost:6001/api/employees/6 获取带有_id=6 的记录时,我得到:
{"message":"Cast to ObjectId failed for value \"6\" at path \"_id\" for model \"records\"","name":"CastError","stringValue":"\"6\"","kind":"ObjectId","value":"6","path":"_id"}
作为错误响应。我在我的 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);
});
数据库中的字段如指南针工具所示:
有什么想法吗?
【问题讨论】:
-
你为什么要告诉mongo文档的
_id?让mongo为你做一个。如果您不指定_id,它将是一个特殊的、唯一的标识值。看到这个:ObjectId。我猜猫鼬会过滤_id如果它是ObjectId类型。 -
其实我觉得我可能看错了。尝试使用
true/false在架构中表明您愿意/不希望有一个_id。看到这篇文章:Schema option: _id. -
但这实际上是一个要求。我需要使用自定义 ID 映射文档,而不是一些任意定义的 ID。这就是整个问题。
-
所以我需要删除我现有的
db架构并使用此选项创建一个新架构? -
您也可以使用自己的
id字段来尝试覆盖_id。您可以使用{_id:0}过滤掉mongo 在投影步骤中跟踪的内部_id。见Projection。
标签: angularjs node.js mongodb express