Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如果使用自定义id在mongoDB中插入记录,则无法通过findOne()获取记录_Angularjs_Node.js_Mongodb_Express - Fatal编程技术网

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
。看见