首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我是mongoDB新手,需要一个查询来删除集合

我是mongoDB新手,需要一个查询来删除集合
EN

Stack Overflow用户
提问于 2020-05-22 16:26:04
回答 1查看 53关注 0票数 0

我有两个收藏。

1.Equipment

代码语言:javascript
运行
复制
    db.getCollection("Equipment").find({ 
    $and: [
        { $where: 'this._id.length <= 7' },
        { "model": "A505"}
    ]})


{
    "_id" : "1234567",
    "locationId" : "DATALOAD",
    "model" : "A505",
    "subscriberId" : "",
    "status" : "Stock",
    "headendNumber" : "4"
}

{
    "_id" : "P13050I",
    "locationId" : "1423110302801",
    "model" : "A505",
    "subscriberId" : "37",
    "status" : "Stock",
    "headendNumber" : "4"
}

我将获得100多个文档(行)的设备集合。

2.Subscriber

代码语言:javascript
运行
复制
db.getCollection('Subscriber').find({})

{
    "_id" : "5622351",
    "equipment" : [ 
        "0018015094E6", 
        "1234567", 
        "ADFB70878422", 
        "M10610TCB052", 
        "MA1113FHQ151"
    ]
}

{
    "_id" : "490001508063",
    "equipment" : [ 
        "17616644510288", 
        "P13050I", 
        "M91416EA4251", 
        "128552270280560"
    ]
}

在订阅者集合中,我只需要删除(从Equipment集合循环中获取所有id ) matches equipment字段。从上面的结果中,我只需要删除"1234567“和"P13050I”。

预期输出。

代码语言:javascript
运行
复制
db.getCollection('Subscriber').find({})

{
    "_id" : "5622351",
    "equipment" : [ 
        "0018015094E6", 

        "ADFB70878422", 
        "M10610TCB052", 
        "MA1113FHQ151"
    ]
}

{
    "_id" : "490001508063",
    "equipment" : [ 
        "17616644510288", 

        "M91416EA4251", 
        "128552270280560"
    ]
}

请帮帮我,任何人。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-23 23:32:07

您可以使用以下内容来更新记录。

让我们找到需要删除的记录,并将它们存储在数组中

代码语言:javascript
运行
复制
var equipments = [];

db.getCollection("Equipment").find({ $and: [
    { $where: 'this._id.length <= 7' },
    { "model": "A505"}
]}).forEach(function(item) => {
    equipments.push(item._id)
})

现在,遍历第二个集合的记录,并根据需要进行更新。

代码语言:javascript
运行
复制
db.getCollection('Subscriber').find({}).forEach(function(document) => {
    var filtered = document.equiment.filter(id => equipments.indexOf(id) < 0);

    if(filtered.length < document.equipment.length){
        db.getCollection('Subscriber').update({"_id": document.id }, { $set: {'equipment': filtered}})
    }
})

.filter(id => equipments.indexOf(id) < 0)将保留最初填充的数组equipments中不存在的条目,如果有任何更改,它将保持不变。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61950778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档