mongodb - 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
但我不知道如何获得否定!
期待您的有用意见!谢谢。
解决方案
您可以使用以下语法获得结果,$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"
}}
])
推荐阅读
- .net - 为什么 dotnet build 和 build in Visual Studio 会产生不同的输出?
- javascript - 两个不同的 .Click() 函数同时工作而不是单独工作 - jquery
- javascript - 通过 JS 更改 CSS 变量
- flutter - RangeSlider 上的 Flutter RangeLabels 不起作用
- php - Codeigniter 3 博客应用程序错误:即使帖子标题没有更改,也要发布 slug 更新
- python - 性能改进 - 搜索 dict (id -> list of lists)
- java - 使用 FileWriter 覆盖相同的文件
- r - 不能使用大于和替换年份
- javascript - 我无法使用
- spring - Thymeleaf 无法将多部分文件转换为字节