Ejemplo n.º 1
0
bool TMongoDriver::insert(const QString &collection, const QVariantMap &object)
{
    if (!isOpen()) {
        return false;
    }

    errorCode = 0;
    errorString.clear();
    bson_error_t error;

    mongoc_collection_t *col = mongoc_client_get_collection(mongoClient, qPrintable(dbName), qPrintable(collection));
    bool res = mongoc_collection_insert(col, MONGOC_INSERT_NONE, (bson_t *)TBson::toBson(object).constData(),
                                        nullptr, &error);

    setLastCommandStatus(mongoc_collection_get_last_error(col));
    mongoc_collection_destroy(col);
    if (!res) {
        tSystemError("MongoDB Insert Error: %s", error.message);
        errorCode = error.code;
        errorString = QLatin1String(error.message);
    }
    return res;
}
int TMongoDriver::count(const QString &collection, const QVariantMap &criteria)
{
    if (!isOpen()) {
        return false;
    }

    errorCode = 0;
    errorString.clear();
    bson_error_t error;

    mongoc_collection_t *col = mongoc_client_get_collection(mongoClient, qPrintable(dbName), qPrintable(collection));
    int count = mongoc_collection_count(col, MONGOC_QUERY_NONE, (bson_t *)TBson::toBson(criteria).data(),
                                        0, 0, nullptr, &error);

    setLastCommandStatus(mongoc_collection_get_last_error(col));
    mongoc_collection_destroy(col);

    if (count < 0) {
        tSystemError("MongoDB Count Error: %s", error.message);
        errorCode = error.code;
        errorString = QLatin1String(error.message);
    }
    return count;
}
Ejemplo n.º 3
0
    /*
    public function update(array $criteria,
                             array $new_object,
                             array $options = array()): mixed;
     */
    static Variant HHVM_METHOD(MongoCollection, update, Array criteria, Array new_object, Array options) {
        mongoc_collection_t *collection;
        bson_t selector; //selector is the criteria (which document to update)
        bson_t update; //update is the new_object containing the new data 
        const bson_t * collection_error; //update is the new_object containing the new data 
        bson_error_t error;
        collection = get_collection(this_);

        encodeToBSON(criteria, &selector);
        encodeToBSON(new_object, &update);
        
        //先定义一些默认的参数
        mongoc_update_flags_t update_flag = MONGOC_UPDATE_NONE;
        //todo
        int w_flag = MONGOC_WRITE_CONCERN_W_DEFAULT;
        
        
        //如果传递了参数
        if(!options.empty()){
            //printf("multiple = %s\r\n",options[String("multiple")].toBoolean() ? "true":"false");
            if(options[String("multiple")].toBoolean()==true){
                update_flag = MONGOC_UPDATE_MULTI_UPDATE;
            }
            if(options[String("upsert")].toBoolean()==true){
                update_flag = MONGOC_UPDATE_UPSERT;
            }
        }
        mongoc_write_concern_t *write_concern;
        write_concern = mongoc_write_concern_new();
        mongoc_write_concern_set_w(write_concern, w_flag);
   
        bool ret = mongoc_collection_update(collection, update_flag, &selector, &update, write_concern, &error);
        bson_destroy(&update);
        bson_destroy(&selector);
        if (!ret) {
            mongoThrow<MongoCursorException>((const char *) error.message);
        }
        collection_error = mongoc_collection_get_last_error(collection);
        //char *str;
        //if (collection_error) {
            //for debug
            //str = bson_as_json(collection_error, NULL);
            //printf("debug = %s\r\n",str);
            //bson_free(str);
        //}
        Array collectionReturn = Array();
        Array ouput = Array();
        collectionReturn = cbson_loads(collection_error);
        mongoc_collection_destroy(collection);
        ouput.add(String("ok"),1);
        ouput.add(String("nModified"),collectionReturn[String("nModified")]);
        ouput.add(String("n"),collectionReturn[String("nMatched")]);
        ouput.add(String("updatedExisting"),collectionReturn[String("nMatched")].toInt64() > 0 ?true:false);//todo 
        
        ouput.add(String("err"),collectionReturn[String("writeErrors")]);
        ouput.add(String("errmsg"),collectionReturn[String("writeErrors")]);
        
        const StaticString s_MongoTimestamp("MongoTimestamp");
        Array mongotimestampParam = Array();
        ObjectData * data = create_object(&s_MongoTimestamp,mongotimestampParam);
        ouput.add(String("lastOp"), data);
        ouput.add(String("mongoRaw"),collectionReturn);
        
        
        return ouput;
        //return ret;

        
    }