我正在学习nodejs和mongodb,并获得平均应用程序
我的系统规格是
Ubuntu 16.04(64位)
节点v 6.1.0
npm v 3.8.6
"mongodb":"^2.1.18",
"猫鼬":"^4.4.16","
到目前为止,我已经创建了模式,并通过终端使用db.locations.save()
在mongob集合中添加了一个条目,并使用db.locations.find()
获得生成的文档_id。
db。位置。查找()。终端中的pretty()返回低于输出的值
{
"_id" : ObjectId("57428745e89f5c55e1d057dc"),
// and many other path
}
现在,当我在浏览器中打开/api/locations/57428745e89f5c55e1d057dc时,它既不给出结果也不结束请求。永久显示加载。。和邮递员一起测试的时候。
即使尝试使用错误的Id,也会返回正确的错误
{"消息":"Cast to ObjectId for value\"57428745e89f5c55e1d057dca\"at path\"_id\","name":"CastError","type":"ObjectId","value":"57428745e89f5c55e1d057dca","path":"_id"}
并且有正确的ID
console.log(mongoose.Types.ObjectId.isValid(req.params.locationid)); // return true
甚至试过
findOne({"_id":猫鼬。类型。ObjectId(req.params.locationid ) })
但是没有结果
可能是什么问题?猫鼬身上有什么虫子吗?下面是我的基本文件和所需的代码
require('./app_api/models/db');
var routesApi = require('./app_api/routes/index');
app.use('/api', routesApi);
var mongoose = require( 'mongoose' );
var mongoURI = 'mongodb://localhost/loc8r';
var mongoDB = mongoose.createConnection(mongoURI);
mongoDB.on('connected', function (){
console.log('mongoose connected to ' + mongoURI);
});
require('./locations');
var mongoose = require( 'mongoose' );
var openingTimeSchema = new mongoose.Schema({
days: {type: String, required: true},
opening: String,
closing: String,
closed: {type: Boolean, required: true}
});
var reviewSchema = new mongoose.Schema({
author: String,
rating: {type: Number, required: true, min: 0, max: 5},
reviewText: String,
createdOn: {type: Date, "default": Date.now}
});
var locationSchema = new mongoose.Schema({
name: {type: String, required: true},
address: String,
rating: {type: Number, "default": 0, min: 0, max: 5},
facilities: [String],
coords: {type: [Number], index: '2dspehere'},
openingTime: [openingTimeSchema],
reviews: [reviewSchema]
});
mongoose.model('Location', locationSchema);
var express = require('express');
var router = express.Router();
var ctrlLocations = require('../controllers/locations');
/* Locations pages */
router.get('/locations/:locationid', ctrlLocations.locationsReadOne);
var mongoose = require('mongoose');
var Loc = mongoose.model('Location');
module.exports.locationsReadOne = function (req, res) {
if(req.params && req.params.locationid) {
Loc
.findById(req.params.locationid)
.exec(function(err, location) {
if(err) {
sendJsonResponse(res, 404, err);
return;
}
if (!location) {
sendJsonResponse(res, 404, {"message": "locationid not found"});
return;
}
sendJsonResponse(res, 200, location);
});
} else {
sendJsonResponse(res, 200, {"message": "no location id in request"});
}
}
var sendJsonResponse = function(res, status, content) {
res.status(status);
res.json(content);
};
我有一个类似的问题,所以我更新了我的模型文件。对于例如。
const workoutsSchema = new Schema({
_id: mongoose.ObjectId,
email_add: String,
workout_date: String,
workout_duration: String
});
在控制器中:-
router.route("/workouts/:id").get(function(req, res) {
console.log("Fetch Workouts of="+req.params.id);
var id = new mongoose.Types.ObjectId(req.params.id);
Workouts.findById(id, function(err, workout) {
if (err)
res.send(err)
res.json(workout);
});
});
从mongoose文档中获取解决方案
重要的如果您使用mongoose打开了单独的连接。createConnection(),但尝试通过mongoose访问模型。model('ModelName')由于未连接到活动数据库连接,因此无法按预期工作。在这种情况下,通过您创建的连接访问您的模型:
因此,改变我创建连接的方式
//var mongoDB = mongoose.createConnection(mongoURI);
mongoose.connect(mongoURI);
还需要注释所有其他使用mongoDB变量的函数/表达式
替代方法:(如果你不想改变mongoDB在db.js)
在控制器/位置中。js
更改var Loc=mongoose。模型(“位置”)
在下面一行
var conn = mongoose.createConnection('mongodb://localhost/loc8r');
var Loc = mongoose.model('Location');
1.控制台您的请求。if之前的参数
Loc8R/app_api/控制器/locations.js
var mongoose = require('mongoose');
var Loc = mongoose.model('Location');
module.exports.locationsReadOne = function (req, res) {
console.log(req.params)
if(req.params && req.params.locationid) {
Loc
.findById(req.params.locationid)
.exec(function(err, location) {
if(err) {
sendJsonResponse(res, 404, err);
return;
}
if (!location) {
sendJsonResponse(res, 404, {"message": "locationid not found"});
return;
}
sendJsonResponse(res, 200, location);
});
} else {
sendJsonResponse(res, 200, {"message": "no location id in request"});
}
}
var sendJsonResponse = function(res, status, content) {
res.status(status);
res.json(content);
};
如果参数为空,或者控制台不工作,那么检查您的路由路径
或
或
我想知道是否有任何方法可以更改由猫鼬,和方法返回的文档对象的可用字段的值,并通过应用到数据库中的更改来更新它们。下面的代码片段是我期望完成我想要的工作:
当我试图更改Mongoose查询返回的数据的任何部分时,它没有任何效果。 昨天我花了大约两个小时试图弄明白这一点,各种各样的s,使用临时存储变量等。最后,就在我觉得自己疯了的时候,我找到了一个解决方案。所以我想到了未来的某个人(Fyuuture!)可能存在保存问题。
我一直在研究猫鼬文档,但我找不到一种方法来实现我想要做的事情。考虑一个MangGDB用户集合。还可以考虑一个包含DB集合中所有字段的蒙古人用户模式。 现在,我想登录到控制台,所有用户,但属性已更改。有点像: 用户。图例(): 给定的异步类型。find()函数我不确定这是否可以实现。我来自C#和PHP背景,只处理关系数据库,这可以通过在用户类中使用只返回所需值的函数轻松实现。 能做到吗?!
来自Mongo Shell 工作并将记录打印到屏幕上。 从快递 我每次都得到空响应。我尝试过不使用ObjectId包装,但我仍然得到空值。mongoDB连接很好,因为我有一个成功返回所有消息。 我做错了什么?
我有两个模型;一个用于用户,另一个用于学习组。每个StudyGroup都有一个唯一的字段。用户模型有一个studyGroups字段,它是字符串的数组。一个用户可以加入多个学习组。 用户模型
为了学习平均堆栈(使用Mongoose),我创建了一个StackOverflow类型的应用程序。我有存储在Mongo(v3.0.7)中的问题,它们有答案子文档。 我试图增加一个答案的投票数,但当问题返回时,它是空的。我非常肯定查询有问题,特别是我试图用需要修改的ID得到答案的地方。 查询0票有效: 更新:通过Mongo查询,返回结果: 但是,通过Mongoose返回NULL: