【发布时间】:2020-09-06 05:14:39
【问题描述】:
我实际上搜索了很多,我在这里看到很多关于我的问题的提及,但我尝试过的所有方法都没有帮助我解决我遇到的问题。
我有一个如下所示的房间方案:
const ObjectId = mongoose.Schema.ObjectId;
const roomSchema = mongoose.Schema({
users: [{
type: ObjectId,
ref: 'User'
}],
messages: [{
type: ObjectId,
ref: 'Message',
}],
post: {
type: ObjectId,
ref: 'Post'
}
});
如您所见,我有一个用户数组,其中引用了另一个架构用户
我正在尝试查询其中包含用户 ObjectId 的所有房间(在数组中搜索 ObjectId)。
虽然我可以使用以下命令从 cmd 查询 mongo 轻松获得此信息:
db.users.find({users:ObjectId('THE_OBJECT_ID')});
当我尝试在使用猫鼬时获得相同的结果时,它会失败:
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 查询时失败。
任何帮助将不胜感激。
【问题讨论】:
-
你输入的应该是
user_id,转换成ObjectId()再查询。所以user_id的值应该是一个遵守ObjectId()限制的字符串,您可以从现有文档的ObjectId()中获取字符串并测试您的getapi..
标签: mongodb mongoose mongodb-query