事实上,我搜索了一吨,我看到了一吨提到我的问题在这里,但没有一件事,我尝试帮助我解决我的问题。
我有一个房间方案,如下所示:
const ObjectId = mongoose.Schema.ObjectId;
const roomSchema = mongoose.Schema({
users: [{
type: ObjectId,
ref: 'User'
}],
messages: [{
type: ObjectId,
ref: 'Message',
}],
post: {
type: ObjectId,
ref: 'Post'
}
});
如您所见,我有一个引用了另一个模式Users用户数组
我正在尝试查询其中包含用户ObjectId的所有工作室(在数组中搜索ObjectId)。
虽然我可以很容易地从cmd中查询mongo,使用以下命令:
db.users.find({users:ObjectId('THE_OBJECT_ID')});
当我尝试在使用mongoose时得到相同的结果时,它失败了:
Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
下面是我的路线和查找方式:
app.route('/rooms/list/:user_id')
.get((req, res) => {
var query = { users: "USER_ID" };
Room.find(query ).populate('messages').then((data) => {
res.status(200).json(data);
}).catch((err) => {
console.log(err);
});
})
我尝试创建对象ID类型并使用它,但它仍然不起作用。
var mongoose = require('mongoose'),
userId = 'THE_USER_ID';
var id = mongoose.Types.ObjectId(userId);
且比
Rooms.find({'users': id });
但还是不行。
我也尝试过用$in,$elemmatch改变我的查询搜索,它在cmd上工作,但是当用mongoose查询时失败了。
任何帮助都将不胜感激。
1条答案
按热度按时间monwx1rj1#
出版日期:
如果选中此项:
您要在这里做什么?您正在传入字符串
USER_ID
或THE_USER_ID
作为输入,并尝试将其转换为ObjectId()
类型。但是ObjectId()中的字符串有某些限制,这就是为什么mongoose无法将传入的字符串值转换为ObjectId()
并输出错误。请尝试以下代码:
代码:
您的输入应该是
user_id
的值(将是字符串)-将其转换为ObjectId()
,然后查询数据库。因此,user_id的值应该是符合**ObjectId()**限制的字符串,您可以从现有文档的ObjectId()
中获取字符串并测试您的get api。