mysql - 使用 WHERE 和 IN 子句的 MongoDB 查询

标签 mysql sql mongodb sails-mongo

我需要从 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/

相关文章:

java - 如何让 EclipseLink 创建 MySQL InnoDB 表?

php - 为什么 (My)SQL 中的 Sum() 函数返回的值是我期望的值的两倍?

java PreparedStatement Arraylist SQL

node.js - 类型 'x' 上不存在 Mongoose 属性 'Document'

mysql - 无论我是否已经定义了主键,如何创建复合主键。 MySQL

mysql - 如何连接同一个表中的多个列?

mysql - 使用sql limit从表中反向检索行

c# - "Incorrect syntax near ' = '"运行时错误 c# asp.net

node.js - 使用 Mongoose 库创建查询(查找数组中的对象)

java - 使用 Java 为 MongoDB 创建数据源