首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当Mongoose中的相同查询正常工作时,Mongoose返回空。

当Mongoose中的相同查询正常工作时,Mongoose返回空。
EN

Stack Overflow用户
提问于 2017-06-01 07:44:29
回答 1查看 321关注 0票数 2

我知道也许这个问题在这里被问过很多次了,我已经经历过一些类似问题的解决方案,但是他们似乎对我的情况都没有帮助。

我有两个集合,名为usersposts,它们的模型如下所示:

用户

代码语言:javascript
运行
复制
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;

发布

代码语言:javascript
运行
复制
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;

我试图使用以下代码获取用户的帖子:

代码语言:javascript
运行
复制
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调试模式报告在请求期间执行下列查询:

代码语言:javascript
运行
复制
posts.find({ user: ObjectId("592e65765ba8a1f70c1eb0bd") }, { fields: {} })

它在Mongoose (我使用Mongoclient)中运行得非常好,但是对于Mongoose,这个查询返回一个空数组。

我在mongodb中运行的查询:

代码语言:javascript
运行
复制
db.posts.find({ user: "592e65765ba8a1f70c1eb0bd" })

我得到的结果:

代码语言:javascript
运行
复制
{ "_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,所以我可能错过了什么。

提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2017-06-01 08:11:04

正如Neil所建议的,我检查了用户字段类型,它实际上是String类型,而不是ObjectId类型,因此存储在集合中的数据与查询中的字段类型之间存在不匹配。

我使用这段代码将用户字段类型从字符串转换为集合中的ObjectId:

代码语言:javascript
运行
复制
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);
    }
);

现在一切都如期而至。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44301482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档