我需要从mongodb similer到以下sql查询中获取数据:
select * from ar_pages where (slug='ettarc' or id in ('1','2','3','4'))
其中一种使用搜索条件,另一种使用带有IN子句的条件(获取具有指定子标签的页面和具有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
}
答案 0 :(得分:1)
尝试一下
db.ar_pages.find({
"$or": [{
"slug" : 'ettarc'
},{ "id": {"$in": ['1','2','3','4']}
}]
});
答案 1 :(得分:1)
您的查询试图匹配_id
,而没有ObjectId()
换行。您需要将其包装起来,然后在$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'
}]
});