我需要从 mongodb 获取数据,类似于下面的 SQL 查询:
select * from ar_pages where (slug='ettarc' or id in ('1','2','3','4'))
它使用一个搜索条件和另一个带有 IN 子句的搜索条件(获取具有指定 slug 的页面和具有 ID 列表的页面)
我正在使用Node Sails框架:我已尝试以下代码:但它不会给出预期的结果
let listing = await Mymodel.find({
$or: [{
id: {
$in: ['5cxxxx90xxxx2e23xxxxxxxx', '5cxxxx18xxxx2e81xxxxxxxx']
}
}, {
user_id: 'xxxxxxxxx'
}]
});
上面的代码在执行时返回以下错误:
MongoError: $or must be an array
Mongo DB 文档示例:
{
"_id" : ObjectId("5d286f93c04a685616627095"),
"title" : "My First Page",
"description" : "My First Page Contents",
"user_id" : "5c80f410c1b9eb3d8fbf541c",
"status" : "active",
"createdAt" : 1562931091686.0,
"updatedAt" : 1563528420160.0,
"is_imported" : false,
"background_img" : "",
"background_color" : "",
"logo" : "",
"media_map" : null
}
最佳答案
您的查询试图在没有 ObjectId()
换行的情况下匹配 _id
。您需要将其包装起来,然后在您的 $in
db.ap_pages.find({
$or: [{
_id: {
$in: [ObjectId('5d3595d9022a3de52f62ce79'), ObjectId('5d3595d9022a3de52f62ce7d')]
}
}, {
user_id: '5c80f410c1b9eb3d8fbf541d'
}]
});
要使用 Mongoose 查找该文档,您必须在 ap_pages 的架构中将 _id 定义为:
_id: { type: String }
然后简单地使用它
db.ap_pages.find({
$or: [{
_id: {
$in: ['5d3595d9022a3de52f62ce79', '5d3595d9022a3de52f62ce7d']
}
}, {
user_id: '5c80f410c1b9eb3d8fbf541d'
}]
});
关于mysql - 使用 WHERE 和 IN 子句的 MongoDB 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57140559/