java - 存在于输入数组中
问题描述
我们有一个股票收藏:
stocks:
{"_id" : ObjectId("xxx"),"scrip" : "xxxxx2" }
{"_id" : ObjectId("xxy"),"scrip" : "xxxxx3" }
{"_id" : ObjectId("xyy"),"scrip" : "..." }
给定一个纸币输入数组[xxxxx7,xxxxx2,xxxxx3,xxxxx8]
,我们需要返回一个股票集合中不存在的纸币数组。
所以预期的输出是:
[xxxxx7,xxxxx8]
有没有办法使用 Filter.expr 和 $setIsSubset(或任何其他替代方法)来实现这一点。
无法获得相同的示例。
帮助表示赞赏
解决方案
假设收集中的数据:
股票:
{"scripid" : "xxxxx2" }
{"scripid" : "xxxxx3" }
{"scripid" : "xxxxx4" }
因此,如果您需要从输入数组中获取不在 股票集合中的元素列表,而不是从股票集合中获取不在输入数组中的元素列表,请使用以下命令:
db.stocks.aggregate([ {
$group :{_id : null, scripids: {$push : '$scripid'}}
},{ "$project": { _id:0 , "inputArrayNINscripts": { "$setDifference": [ ['xxxxx7','xxxxx2','xxxxx3','xxxxx8'] , "$scripids" ] } } } ])
输出:
{
"inputArrayNINscripts" : [
"xxxxx7",
"xxxxx8"
]
}
否则,如果您需要股票scripid中未通过的元素列表(scripid's) [xxxxx7,xxxxx2,xxxxx3,xxxxx8]
,如@Caconde 建议的那样,请尝试以下操作:
db.stocks.find({
"scripid": {"$nin": ["xxxxx7","xxxxx2","xxxxx3","xxxxx8"]}
}).toArray().map(scriptsNINArray => scriptsNINArray.scripid)
输出:
/* 1 */
[
"xxxxx4"
]
附加组件:
根据要求提供 java 代码,请检查以下参考资料:
推荐阅读
- node.js - 使用express to html在nodejs中渲染
- matlab - Matlab Compiler:编译包含预训练神经网络的代码
- javascript - 如何在 React 中一次设置一个组件的活动状态,并删除所有其他组件的活动状态?
- python - 使用内联循环不改变 else
- tcp - Kiali 仪表板中入站指标和出站指标的“报告来源”是什么意思?
- android - ERR_CLEARTEXT_NOT_PERMITTED
- python - 根据日期范围创建与 ID 匹配的新数据框
- php - 检查两个数组是否有相同的值
- java - 收缩数组在 Java 中维护数字分布
- qt - 向 QML 布局添加边距