Example usage for com.mongodb DBCollection remove

List of usage examples for com.mongodb DBCollection remove

Introduction

In this page you can find the example usage for com.mongodb DBCollection remove.

Prototype

public WriteResult remove(final DBObject query, final DBCollectionRemoveOptions options) 

Source Link

Document

Remove documents from a collection.

Usage

From source file:org.teiid.translator.mongodb.MongoDBUpdateExecution.java

License:Open Source License

private void executeInternal() throws TranslatorException {

    DBCollection collection = getCollection(this.visitor.mongoDoc.getTargetTable());
    MongoDocument mongoDoc = this.visitor.mongoDoc;
    AggregationOptions options = this.executionFactory.getOptions(this.executionContext.getBatchSize());

    List<WriteResult> executionResults = new ArrayList<WriteResult>();

    if (this.command instanceof Insert) {
        // get pull key based documents to embed
        LinkedHashMap<String, DBObject> embeddedDocuments = fetchEmbeddedDocuments();

        // check if this document need to be embedded in any other document
        if (mongoDoc.isMerged()) {
            DBObject match = getInsertMatch(mongoDoc, this.visitor.columnValues);
            BasicDBObject insert = this.visitor.getInsert(embeddedDocuments);

            if (mongoDoc.getMergeKey().getAssociation() == Association.MANY) {
                removeParentKey(mongoDoc, insert);
                BasicDBObject insertDoc = new BasicDBObject(mongoDoc.getQualifiedName(true), insert);
                LogManager.logDetail(LogConstants.CTX_CONNECTOR, "update - {\"$match\": {" + match + "}}"); //$NON-NLS-1$ //$NON-NLS-2$
                LogManager.logDetail(LogConstants.CTX_CONNECTOR, "update - {\"$push\": {" + insertDoc + "}}"); //$NON-NLS-1$ //$NON-NLS-2$
                executionResults.add(collection.update(match, new BasicDBObject("$push", insertDoc), false, //$NON-NLS-1$
                        true, WriteConcern.ACKNOWLEDGED));
            } else {
                insert.remove("_id"); //$NON-NLS-1$
                BasicDBObject insertDoc = new BasicDBObject(mongoDoc.getQualifiedName(true), insert);
                LogManager.logDetail(LogConstants.CTX_CONNECTOR, "update - {\"$match\": {" + match + "}}"); //$NON-NLS-1$ //$NON-NLS-2$
                LogManager.logDetail(LogConstants.CTX_CONNECTOR, "update - {\"$set\": {" + insertDoc + "}}"); //$NON-NLS-1$ //$NON-NLS-2$
                executionResults.add(collection.update(match, new BasicDBObject("$set", insertDoc), false, true, //$NON-NLS-1$
                        WriteConcern.ACKNOWLEDGED));
            }//from w  ww  .  j  a  v a2s. c  o m
        } else {
            for (String docName : embeddedDocuments.keySet()) {
                DBObject embeddedDoc = embeddedDocuments.get(docName);
                embeddedDoc.removeField("_id"); //$NON-NLS-1$
            }
            // gets its own collection
            BasicDBObject in = this.visitor.getInsert(embeddedDocuments);
            LogManager.logDetail(LogConstants.CTX_CONNECTOR, "{\"insert\": {" + in + "}}"); //$NON-NLS-1$ //$NON-NLS-2$
            executionResults.add(collection.insert(in, WriteConcern.ACKNOWLEDGED));
        }
    } else if (this.command instanceof Update) {
        // get pull key based documents to embed
        LinkedHashMap<String, DBObject> embeddedDocuments = fetchEmbeddedDocuments();
        DBObject match = new BasicDBObject();
        if (this.visitor.match != null) {
            match = this.visitor.match;
        }
        if (mongoDoc.isMerged()) {
            // multi items in array update not available, http://jira.mongodb.org/browse/SERVER-1243
            // this work-around for above issue
            List<String> parentKeyNames = parentKeyNames(mongoDoc);

            DBObject documentMatch = new BasicDBObject("$match", match); //$NON-NLS-1$                  
            DBObject projection = new BasicDBObject("$project", buildProjectForUpdate(mongoDoc)); //$NON-NLS-1$
            Cursor output = collection.aggregate(Arrays.asList(documentMatch, projection), options);
            while (output.hasNext()) {
                BasicDBObject row = (BasicDBObject) output.next();
                buildUpdate(mongoDoc, collection, row, parentKeyNames, 0, null, executionResults,
                        new UpdateOperationImpl());
            }
        } else {
            for (String docName : embeddedDocuments.keySet()) {
                DBObject embeddedDoc = embeddedDocuments.get(docName);
                embeddedDoc.removeField("_id"); //$NON-NLS-1$
            }
            BasicDBObject u = this.visitor.getUpdate(embeddedDocuments);
            LogManager.logDetail(LogConstants.CTX_CONNECTOR, "update - {\"$match\": {" + match + "}}"); //$NON-NLS-1$ //$NON-NLS-2$
            LogManager.logDetail(LogConstants.CTX_CONNECTOR, "update - {\"$set\": {" + u + "}}"); //$NON-NLS-1$ //$NON-NLS-2$
            executionResults.add(collection.update(match, new BasicDBObject("$set", u), false, true, //$NON-NLS-1$
                    WriteConcern.ACKNOWLEDGED));
        }

        // if the update is for the "embeddable" table, then since it is copied to other tables
        // those references need to be updated. I know this is not atomic operation, but not sure
        // how else to handle it.
        if (mongoDoc.isEmbeddable()) {
            updateReferenceTables(collection, mongoDoc, match, options);
        }
    } else {
        // Delete
        DBObject match = new BasicDBObject();
        if (this.visitor.match != null) {
            match = this.visitor.match;
        }

        if (mongoDoc.isEmbeddable()) {
            DBObject m = new BasicDBObject("$match", match); //$NON-NLS-1$
            Cursor output = collection.aggregate(Arrays.asList(m), options);
            while (output.hasNext()) {
                DBObject row = output.next();
                if (row != null) {
                    for (MergeDetails ref : mongoDoc.getEmbeddedIntoReferences()) {
                        DBCollection parent = getCollection(ref.getParentTable());
                        DBObject parentMatch = buildParentMatch(row, ref);
                        DBObject refMatch = new BasicDBObject("$match", parentMatch); //$NON-NLS-1$
                        Cursor referenceOutput = parent.aggregate(Arrays.asList(refMatch), options);
                        if (referenceOutput.hasNext()) {
                            throw new TranslatorException(MongoDBPlugin.Util.gs(MongoDBPlugin.Event.TEIID18010,
                                    this.visitor.mongoDoc.getTargetTable().getName(), ref.getParentTable()));
                        }
                    }
                }
            }
        }

        if (mongoDoc.isMerged()) {
            List<String> parentKeyNames = parentKeyNames(mongoDoc);

            DBObject documentMatch = new BasicDBObject("$match", match); //$NON-NLS-1$                      
            DBObject projection = new BasicDBObject("$project", buildProjectForUpdate(mongoDoc)); //$NON-NLS-1$
            Cursor output = collection.aggregate(Arrays.asList(documentMatch, projection), options);
            while (output.hasNext()) {
                BasicDBObject row = (BasicDBObject) output.next();
                buildUpdate(mongoDoc, collection, row, parentKeyNames, 0, null, executionResults,
                        new DeleteOperationImpl(match));
            }
        } else {
            LogManager.logDetail(LogConstants.CTX_CONNECTOR, "remove - {\"$match\": {" + match + "}}"); //$NON-NLS-1$ //$NON-NLS-2$
            executionResults.add(collection.remove(match, WriteConcern.ACKNOWLEDGED));
        }
    }

    if (!executionResults.isEmpty()) {
        if (this.command instanceof Insert) {
            if (this.executionContext.getCommandContext().isReturnAutoGeneratedKeys()) {
                addAutoGeneretedKeys(executionResults.get(0));
            }
        }

        int updated = 0;
        for (WriteResult result : executionResults) {
            updated += result.getN();
        }

        this.results = new int[1];
        this.results[0] = updated;
    }
}

From source file:simple.crawler.mongo.CrawlingDB.java

License:Open Source License

public void remove(CrawlingDBObject obj, Collection collection) {
    DB db = client.getDB(dbName);//from  w  w  w .j av  a  2s  .  c  o  m
    DBCollection con = db.getCollection(collection.toString());
    con.remove(obj, WriteConcern.SAFE);
}

From source file:v7db.files.mongodb.SimpleGarbageCollector.java

License:Open Source License

static void purge(DBCollection contents, DBCollection references) throws MongoException, DecoderException {

    List<Object> refsToPurge = new ArrayList<Object>();
    Set<String> potentialGarbage = new HashSet<String>();
    Set<String> notGarbage = new HashSet<String>();

    for (DBObject x : references.find()) {
        if (x.containsField("purge")) {
            refsToPurge.add(x.get("_id"));
            for (Object r : BSONUtils.values(x, "refs")) {
                String h = Hex.encodeHexString((byte[]) r);
                potentialGarbage.add(h);
            }/*from w w  w  . j  a v  a 2  s.  c  o  m*/
            for (Object r : BSONUtils.values(x, "refHistory")) {
                String h = Hex.encodeHexString((byte[]) r);
                potentialGarbage.add(h);
            }
        } else {
            for (Object r : BSONUtils.values(x, "refs")) {
                String h = Hex.encodeHexString((byte[]) r);
                notGarbage.add(h);
            }
            for (Object r : BSONUtils.values(x, "refHistory")) {
                String h = Hex.encodeHexString((byte[]) r);
                notGarbage.add(h);
            }
        }
    }

    potentialGarbage.removeAll(notGarbage);
    // TODO: bases must not be removed
    for (String g : potentialGarbage) {
        contents.remove(new BasicDBObject("_id", Hex.decodeHex(g.toCharArray())), WriteConcern.SAFE);
    }
    for (Object x : refsToPurge) {
        references.remove(new BasicDBObject("_id", x), WriteConcern.SAFE);
    }
}