我知道也许这个问题在这里被问过很多次了,我已经经历过一些类似问题的解决方案,但是他们似乎对我的情况都没有帮助。
我有两个集合,名为users
和posts
,它们的模型如下所示:
用户
var mongoose = require('mongoose').set('debug', true);
var Schema = mongoose.Schema;
var usersSchema = new Schema({
name: {type: String, required: true}
});
var User = mongoose.model('user', usersSchema, 'users');
module.exports = User;
发布
var mongoose = require('mongoose').set('debug', true);
var Schema = mongoose.Schema;
var postsSchema = new Schema({
content: String,
user: {
type: Schema.ObjectId,
ref: 'users',
required: true
}
});
var Post = mongoose.model('post', postsSchema, 'posts');
module.exports = Post;
我试图使用以下代码获取用户的帖子:
var Post = require('../models/posts');
...
router.get('/posts/user/:userId', function (req, res, next) {
Post.find({user: req.params.userId}, function (err, posts) {
Post.populate(posts, {path: 'user'}, function(err, posts) {
res.send(posts);
});
});
});
Mongoose调试模式报告在请求期间执行下列查询:
posts.find({ user: ObjectId("592e65765ba8a1f70c1eb0bd") }, { fields: {} })
它在Mongoose (我使用Mongoclient)中运行得非常好,但是对于Mongoose,这个查询返回一个空数组。
我在mongodb中运行的查询:
db.posts.find({ user: "592e65765ba8a1f70c1eb0bd" })
我得到的结果:
{ "_id" : ObjectId("592e66b48f60c03c1ee06445"), "content" : "Test post 3", "user" : "592e65765ba8a1f70c1eb0bd" }
{ "_id" : ObjectId("592e66b98f60c03c1ee06446"), "content" : "Test post 4", "user" : "592e65765ba8a1f70c1eb0bd" }
{ "_id" : ObjectId("592e66bb8f60c03c1ee06447"), "content" : "Test post 5", "user" : "592e65765ba8a1f70c1eb0bd" }
我刚开始学习Node.JS和MongoDB,所以我可能错过了什么。
提前谢谢你!
发布于 2017-06-01 00:11:04
正如Neil所建议的,我检查了用户字段类型,它实际上是String类型,而不是ObjectId类型,因此存储在集合中的数据与查询中的字段类型之间存在不匹配。
我使用这段代码将用户字段类型从字符串转换为集合中的ObjectId:
db.getCollection('posts').find().forEach(function (post) {
db.getCollection('posts').remove({ _id : post._id});
tempUserId = new ObjectId(post.user);
post.user = tempUserId;
db.getCollection('posts').save(post);
}
);
现在一切都如期而至。
https://stackoverflow.com/questions/44301482
复制相似问题