猿问

MongoDB $和查询

我想要在 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();


江户川乱折腾
浏览 180回答 3
3回答

一只萌萌小番薯

试试这个: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();

拉丁的传说

不幸的是,在撰写本文时,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'    }  ]};

倚天杖

我认为在接受的答案中使用的查询可能要短得多。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"    }  }
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答