首页 > 解决方案 > MongoDB聚合查找未在数组中列出的项目

问题描述

我将以下内容用于人口,但不确定如何使用人口的否定

db.getCollection("storeCheckRecords").aggregate([
  {
    $group: {
      _id: null,
      store_ids: { $addToSet: "$store_id" },
    },
  },
  //   {
  //     $lookup: {
  //       from: "allStores",
  //       localField: "store_ids", // I want to do NOT IN store_ids
  //       foreignField: "_id",
  //     },
  //   },
]);

上面的管道相当简单,我们$store_ids首先获取所有唯一的,然后我们想要列出集合中的所有商店,allStores这样它就不会出现在$stores.

我的尝试:我知道如何填充该领域存在的商店,store_ids但我不知道如何获得否定

期待您的有用意见!谢谢。

标签: mongodbmongodb-queryaggregation-framework

解决方案


您可以使用以下语法获得结果,$lookup并且可以$not $in在其中使用。

db.getCollection("storeCheckRecords").aggregate([
  { "$lookup":  {
    "from": "allStores",
    "let": { "store_ids": "$store_ids" },
    "pipeline": [
      { "$match": { "$expr": { "$not": { "$in": [ "$_id", "$$store_ids" ] }}}},
    ],
    "as": "allStores"
  }}
])

推荐阅读