使用 WHERE 和 IN 子句的 MongoDB 查询

Posted

技术标签:

【中文标题】使用 WHERE 和 IN 子句的 MongoDB 查询【英文标题】:MongoDB query using WHERE and IN clause 【发布时间】:2019-07-22 06:53:41 【问题描述】:

我需要从 mongodb simile 获取数据到下面的 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

【问题讨论】:

嗯,有什么问题..? @nacho:我不想让别人给我编码,只是需要帮助,过去 2 天我尝试了太多,我正在努力,没有得到预期的结果, @BarbarosÖzhan:尝试了很多,但没有得到预期的结果,所以问题是这样给出的。如果你有答案,请提出建议。 您可以发布您尝试过的内容吗?更容易在此基础上构建 请同时添加示例文档 【参考方案1】:

您的查询试图在没有 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'
        ]
    );

【讨论】:

不,我在一个 js 文件中编码。当 ObjectId 被包装时,它显示:ReferenceError: ObjectId is not defined 同样的响应:MongoError: $or must be an array【参考方案2】:

试试这个

db.ar_pages.find(

    "$or": [
        "slug" : 'ettarc' 
    , "id": "$in":  ['1','2','3','4']
    ]
);

对于 Sails 框架,请使用:

db.ar_pages.find(
    or: [
        
          "slug" : 'ettarc' 
       , 
          "id": 
             in:  ['1','2','3','4']
          
       
    ]
);

【讨论】:

试过了,但是返回错误:MongoError: $or must be an array 更改 $ 符号时为我工作。 $ 不用于 in and or 运算符的风帆框架 sork (sails mongo) 中。而不是使用 $or 和 $in 只需使用 or 和 in

以上是关于使用 WHERE 和 IN 子句的 MongoDB 查询的主要内容,如果未能解决你的问题,请参考以下文章

仅使用 WHERE 子句组合 LIKE 和 IN

Doctrine2 查询(Builder)在使用“where”和“in”子句后失去关系

在 where 子句中使用解码,并带有“in”

MongoDB 的 $in 子句是不是有参数数量的最大限制

MongoDB 的 $in 子句是不是有参数数量的最大限制

Where - OLAP Cube 中的 In 子句