gpt4 book ai didi

node.js - Mongoose 返回空,而 mongodb shell 中的相同查询工作正常

转载 作者:可可西里 更新时间:2023-11-01 10:41:00 24 4
gpt4 key购买 nike

我知道这个问题可能已经在这里被问过很多次了,我已经研究了人们针对类似问题提出的几种解决方案,但它们似乎对我的情况没有帮助。

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

用户

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 Debug模式报告在请求期间执行了以下查询:

posts.find({ user: ObjectId("592e65765ba8a1f70c1eb0bd") }, { fields: {} })

这在 mongodb shell 中工作得很好(我使用的是 Mongoclient)但是对于 Mongoose 这个查询返回一个空数组。

我在 mongodb shell 中运行的查询:

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,所以我可能错过了一些东西。

提前致谢!

最佳答案

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

我使用此代码将我集合中的用户字段类型从 String 转换为 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);
}
);

现在一切正常。

关于node.js - Mongoose 返回空,而 mongodb shell 中的相同查询工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44301482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com