给定一个id列表,查询集合中不存在哪些id的最佳方法是什么?
Given a list of ids, what's the best way to query which ids do not exist in the collection?
我有一个包含唯一id字段的文档集合。现在我有一个id列表,其中可能包含集合中不存在的一些id。从列表中找出这些id的最佳方法是什么?
我知道我可以使用$in操作符来获取包含在列表中的id的文档,然后与给定的id列表进行比较,但是有更好的方法来做到这一点吗?
我想你的收藏中有下列文件:
{ "_id" : ObjectId("55b725fd7279ca22edb618bb"), "id" : 1 }
{ "_id" : ObjectId("55b725fd7279ca22edb618bc"), "id" : 2 }
{ "_id" : ObjectId("55b725fd7279ca22edb618bd"), "id" : 3 }
{ "_id" : ObjectId("55b725fd7279ca22edb618be"), "id" : 4 }
{ "_id" : ObjectId("55b725fd7279ca22edb618bf"), "id" : 5 }
{ "_id" : ObjectId("55b725fd7279ca22edb618c0"), "id" : 6 }
和以下id
var listId = [ 1, 3, 7, 9, 8, 35 ];
我们可以使用 .filter
方法返回不在集合中的ids
数组。
var result = listId.filter(function(el){
return db.collection.distinct('id').indexOf(el) == -1; });
这个收益率
[ 7, 9, 8, 35 ]
现在您还可以使用聚合框架和$setDifference
操作符。
db.collection.aggregate([
{ "$group": { "_id": null, "ids": { "$addToSet": "$id" }}},
{ "$project" : { "missingIds": { "$setDifference": [ listId, "$ids" ]}, "_id": 0 }}
])
这个收益率:
{ "missingIds" : [ 7, 9, 8, 35 ] }
不幸的是,MongoDB只能使用内置函数(否则我建议使用set
),但你可以尝试在列表中找到所有不同的id,然后手动将它们拉出来。
类似于(未经测试):
var your_unique_ids = ["present", "not_present"];
var present_ids = db.getCollection('your_col').distinct('unique_field', {unique_field: {$in: your_unique_ids}});
for (var i=0; i < your_unique_ids.length; i++) {
var some_id = your_unique_ids[i];
if (present_ids.indexOf(some_id) < 0) {
print(some_id);
}
}
查询结果如下:
var listid = [1,2,3,4];
db.collection.aggregate([
{$project: { uniqueId :
{
"$setDifference":
[ listid , db.collection.distinct( "unique_field" )]} , _id : 0 }
},
{$limit:1}
]);
相关文章:
- coffeescript 的行为就像 ID 仍然存在一样,但它不存在
- 我正在尝试遍历 id 数组,如果不存在 id,则插入一个 mongodb 文档.我怎样才能让他们坚持下去
- 映像 ID 在当前上下文 asp.net 中不存在
- 如果我在不存在的元素ID上使用$(“#ElementId”).val(),这是个问题吗
- 否则,如果元素ID没有'不存在
- 在MongoDB中输入用户名数组,并返回相同大小的id数组,对于不存在的用户名为null或false
- 是否有一种方法来验证YouTube视频ID,同时处理CORS和不存在的API
- 函数被调用,即使ID不存在于文档中
- 我怎么能不'不应用插件id,如果他不存在
- 在javascript的每个函数上获取textarea的不存在的id
- jQuery id选择器不返回不存在元素的空数组
- 对当前不存在的ID执行函数
- 给定一个id列表,查询集合中不存在哪些id的最佳方法是什么?
- 姓名'id'在Javascript方法的当前上下文中不存在
- 当请求的ID不存在时如何避免空记录?(余烬)
- JavaScript onclick 事件,当“id”不存在时
- TypeScript - 类型“节点”上不存在属性“id”
- Meteor JS - 子 id 的异常(不存在的 id)
- if循环获取数据(如果表中存在)如果不存在,则在表中插入值并使用javascript获取写入配置文件id的数据
- 使用jQuery获取页面中不存在的类/id的css属性