数据库中所有集合的ObjMongoDB列表

时间:2014-07-24 00:05:43

标签: mongodb objcmongodb

使用ObjcMongodb框架 - 如何在数据库中查找类似于show collections(shell命令)的所有集合

2 个答案:

答案 0 :(得分:0)

您可以在MongoConnection上使用这些方法调用任意数据库命令:

- (NSDictionary *) runCommandWithName:(NSString *) commandName
                       onDatabaseName:(NSString *) databaseName
                                error:(NSError * __autoreleasing *) error;
- (NSDictionary *) runCommandWithDictionary:(NSDictionary *) dictionary
                             onDatabaseName:(NSString *) databaseName
                                      error:(NSError * __autoreleasing *) error;

有关示例,请参阅this answer

答案 1 :(得分:0)

要列出数据库中的所有集合,请查询system.namespaces集合。

system.namespaces集合包括集合名称和索引,因此您需要过滤结果以忽略任何系统集合(例如:system.indexes)以及包含$的集合(索引/特别收藏品。)

示例代码:

NSError *error = nil;
MongoConnection *dbConn = [MongoConnection connectionForServer:@"127.0.0.1" error:&error];

// For database "mydb", look in "system.namespaces" collection
MongoDBCollection *collection = [dbConn collectionWithName:@"mydb.system.namespaces"];

NSArray *results = [collection findAllWithError:&error];
for (BSONDocument *result in results) {
    NSDictionary *systemNamespace = [BSONDecoder decodeDictionaryWithDocument:result];
    NSString *collName = [systemNamespace objectForKey:@"name"];

    // Namespaces to ignore: mydb.system.* (system) and those containing $ (indexes/special)
    if (
        ([collName rangeOfString:@".system."].location == NSNotFound) &&
        ([collName rangeOfString:@"$"].location == NSNotFound)) {
        NSLog(@"Found collection: %@", collName);
    } else {
        // NSLog(@"Ignoring: %@", collName);
    }
}