为了账号安全,请及时绑定邮箱和手机立即绑定

MongoDB $和查询

MongoDB $和查询

江户川乱折腾 2022-06-09 16:20:09
我想要在 MongoDB 中执行以下操作的查询:文档返回profession.organization的属性可以是字符串“bank”。文档返回profession.city的属性可以是字符串“NY”。但是,当文件中“profession.organization”为“bank”且“profession.city”为“NY”时,必须排除该文件。总而言之,一个文件可以有城市“NY”或组织“银行”,但如果它同时具有这些属性,则必须排除。到目前为止我所尝试的。 targetObj = await db.db(MDBC.db).collection(MDBC.pC)        .aggregate([{            $match: {                $and: [                { 'profession.organization': { $ne: 'bank' } },                 { 'profession.city': { $ne: 'NY' } }              ]            }        }, { $sample: { size: 1 } }]).next();
查看完整描述

3 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

试试这个:


targetObj = await db.db(MDBC.db).collection(MDBC.pC)

 .aggregate([

  {

    $match: {

      $and: [

        {

          $or: [

            { "profession.organization": "bank" },

            { "profession.city": "NY" }

          ]

        },

        {

          $or: [

            {

              "profession.organization": "bank",

              "profession.city": { $ne: "NY" }

            },

            {

              "profession.organization": { $ne: "bank" },

              "profession.city": "NY"

            }

          ]

        }

      ]

    }

  },

  { $sample: {size: 1} } ]).next();


查看完整回答
反对 回复 2022-06-09
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

不幸的是,在撰写本文时,MongoDB 中没有匹配的运算符来帮助解决这个问题。$or但是您可以通过组合and运算符来获得类似的结果$ne。为您的查询尝试这样的事情:


const query = {

  $or: [

    {

      // Include all non-banks outside of NY.

      'profession.city': { $ne: 'NY' },

      'profession.organization': { $ne: 'bank' }

    },

    {

      // Include all non-banks in NY.

      'profession.city': 'NY',

      'profession.organization': { $ne: 'bank' }

    },

    {

      // Include all banks outside of NY.

      'profession.city': { $ne: 'NY' },

      'profession.organization': 'bank'

    }

  ]

};


查看完整回答
反对 回复 2022-06-09
?
倚天杖

TA贡献1828条经验 获得超3个赞

我认为在接受的答案中使用的查询可能要短得多。


db.collection.aggregate([

  {

    $match: {

      $or: [

        {

          "profession.organization": "bank",

          "profession.city": {

            $ne: "NY"

          }

        },

        {

          "profession.organization": {

            $ne: "bank"

          },

          "profession.city": "NY"

        }

      ]

    }

  },

  {

    $sample: {

      size: 1

    }

  }

])

我还要说的一件事是,如果您还想包含不具有这两个属性中的任何一个的文档,那么您应该使用它:


db.collection.aggregate([

  {

    $match: {

      $or: [

        {

          "profession.organization": "bank",

          "profession.city": {

            $ne: "NY"

          }

        },

        {

          "profession.organization": {

            $ne: "bank"

          },

          "profession.city": "NY"

        },

        {

          "profession.organization": {

            $ne: "bank"

          },

          "profession.city": {

            $ne: "NY"

          }

        }

      ]

    }

  },

  {

    $sample: {

      size: 1

    }

  }

])

这还将包括文件,如 -


  {

    "profession": {

      "organization": "someBank",

      "city": "notNA"

    }

  }


查看完整回答
反对 回复 2022-06-09
  • 3 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号