• MongoDB
    • MongoDB支持
    • 定义实体和列
    • 定义subdocuments(embed documents)
    • 使用MongoEntityManagerMongoRepository
      • createCursor
      • createEntityCursor
      • aggregate
      • bulkWrite
      • count
      • createCollectionIndex
      • createCollectionIndexes
      • deleteMany
      • deleteOne
      • distinct
      • dropCollectionIndex
      • dropCollectionIndexes
      • findOneAndDelete
      • findOneAndReplace
      • findOneAndUpdate
      • geoHaystackSearch
      • geoNear
      • group
      • collectionIndexes
      • collectionIndexExists
      • collectionIndexInformation
      • initializeOrderedBulkOp
      • initializeUnorderedBulkOp
      • insertMany
      • insertOne
      • isCapped
      • listCollectionIndexes
      • mapReduce
      • parallelCollectionScan
      • reIndex
      • rename
      • replaceOne
      • stats
      • updateMany
      • updateOne

    MongoDB

    MongoDB支持

    TypeORM 具有基本的 MongoDB 支持。 TypeORM 大多数功能都是特定于 RDBMS 的, 此页面包含了所有 MongoDB 特定的功能文档。

    定义实体和列

    定义实体和列几乎与关系数据库中的相同,主要区别在于你必须使用@ObjectIdColumn而不是@PrimaryColumn@PrimaryGeneratedColumn

    简单实体示例:

    1. import { Entity, ObjectID, ObjectIdColumn, Column } from "typeorm";
    2. @Entity()
    3. export class User {
    4. @ObjectIdColumn()
    5. id: ObjectID;
    6. @Column()
    7. firstName: string;
    8. @Column()
    9. lastName: string;
    10. }

    这里是你的应用程序如何连接到 MongoDB:

    1. import { createConnection, Connection } from "typeorm";
    2. const connection: Connection = await createConnection({
    3. type: "mongodb",
    4. host: "localhost",
    5. port: 27017,
    6. database: "test"
    7. });

    定义subdocuments(embed documents)

    由于 MongoDB 存储对象和对象内的对象(或文档内的文档),因此你可以在 TypeORM 中执行相同的操作:

    1. import { Entity, ObjectID, ObjectIdColumn, Column } from "typeorm";
    2. export class Profile {
    3. @Column()
    4. about: string;
    5. @Column()
    6. education: string;
    7. @Column()
    8. career: string;
    9. }
    1. import { Entity, ObjectID, ObjectIdColumn, Column } from "typeorm";
    2. export class Photo {
    3. @Column()
    4. url: string;
    5. @Column()
    6. description: string;
    7. @Column()
    8. size: number;
    9. constructor(url: string, description: string, size: number) {
    10. this.url = url;
    11. this.description = description;
    12. this.size = size;
    13. }
    14. }
    1. import { Entity, ObjectID, ObjectIdColumn, Column } from "typeorm";
    2. @Entity()
    3. export class User {
    4. @ObjectIdColumn()
    5. id: ObjectID;
    6. @Column()
    7. firstName: string;
    8. @Column()
    9. lastName: string;
    10. @Column(type => Profile)
    11. profile: Profile;
    12. @Column(type => Photo)
    13. photos: Photo[];
    14. }

    如果保存此实体:

    1. import { getMongoManager } from "typeorm";
    2. const user = new User();
    3. user.firstName = "Timber";
    4. user.lastName = "Saw";
    5. user.profile = new Profile();
    6. user.profile.about = "About Trees and Me";
    7. user.profile.education = "Tree School";
    8. user.profile.career = "Lumberjack";
    9. user.photos = [
    10. new Photo("me-and-trees.jpg", "Me and Trees", 100),
    11. new Photo("me-and-chakram.jpg", "Me and Chakram", 200)
    12. ];
    13. const manager = getMongoManager();
    14. await manager.save(user);

    以下文档将保存在数据库中:

    1. {
    2. "firstName": "Timber",
    3. "lastName": "Saw",
    4. "profile": {
    5. "about": "About Trees and Me",
    6. "education": "Tree School",
    7. "career": "Lumberjack"
    8. },
    9. "photos": [
    10. {
    11. "url": "me-and-trees.jpg",
    12. "description": "Me and Trees",
    13. "size": 100
    14. },
    15. {
    16. "url": "me-and-chakram.jpg",
    17. "description": "Me and Chakram",
    18. "size": 200
    19. }
    20. ]
    21. }

    使用MongoEntityManagerMongoRepository

    你可以使用EntityManager中的大多数方法(除了特定于 RDBMS 的方法,如querytransaction)。 例如:

    1. import { getManager } from "typeorm";
    2. const manager = getManager(); // 或者 connection.manager
    3. const timber = await manager.findOne(User, { firstName: "Timber", lastName: "Saw" });

    对于 MongoDB,还有一个单独的MongoEntityManager,它扩展了EntityManager

    1. import { getMongoManager } from "typeorm";
    2. const manager = getMongoManager(); // 或者 connection.mongoManager
    3. const timber = await manager.findOne(User, { firstName: "Timber", lastName: "Saw" });

    就像MongoEntityManagerEntityManager一样,MongoRepository也扩展了Repository

    1. import { getMongoRepository } from "typeorm";
    2. const userRepository = getMongoRepository(User); // 或者 connection.getMongoManager
    3. const timber = await userRepository.findOne({ firstName: "Timber", lastName: "Saw" });

    MongoEntityManagerMongoRepository都包含许多有用的 MongoDB 特定方法:

    createCursor

    为查询创建一个游标,可用于迭代 MongoDB 的结果。

    createEntityCursor

    为查询创建一个游标,可用于迭代 MongoDB 的结果。 这将返回游标的修改版本,该版本将每个结果转换为实体模型。

    aggregate

    针对集合执行 aggregation framework 管道。

    bulkWrite

    在没有连贯 API 的情况下执行 bulkWrite 操作。

    count

    计算 db 中与查询匹配的文档的数量。

    createCollectionIndex

    在 db 和 collection 上创建索引。

    createCollectionIndexes

    在集合中创建多个索引,此方法仅在 MongoDB 2.6 或更高版本中受支持。 早期版本的 MongoDB 会抛出命令不支持的错误。 索引规范在http://docs.mongodb.org/manual/reference/command/createIndexes/中定义。

    deleteMany

    删除 MongoDB 上的多个文档。

    deleteOne

    删除 MongoDB 上的文档。

    distinct

    distinct 命令返回集合中给定键的不同值列表。

    dropCollectionIndex

    从此集合中删除索引。

    dropCollectionIndexes

    删除集合中的所有索引。

    findOneAndDelete

    查找文档并在一个 atomic 操作中将其删除,在操作期间需要写入锁定。

    findOneAndReplace

    查找文档并在一个 atomic 操作中替换它,在操作期间需要写入锁定。

    findOneAndUpdate

    查找文档并在一个 atomic 操作中更新它,在操作期间需要写入锁定。

    geoHaystackSearch

    使用集合上的 geo haystack 索引执行 geo 搜索。

    geoNear

    执行 geoNear 命令以搜索集合中的项目。

    group

    跨集合运行组命令。

    collectionIndexes

    检索集合上的所有索引。

    collectionIndexExists

    检索集合中是否存在索引

    collectionIndexInformation

    检索此集合索引信息

    initializeOrderedBulkOp

    启动按顺序批量写入操作,将按添加顺序连续执行操作,为类型中的每个开关创建新操作。

    initializeUnorderedBulkOp

    启动乱序批量写入操作。 所有操作都将缓冲到无序执行的 insert/update/remove 命令中。

    insertMany

    将一组文档插入 MongoDB。

    insertOne

    将单个文档插入 MongoDB。

    isCapped

    如果集合是上限集合,则返回。

    listCollectionIndexes

    获取集合的所有索引信息的列表。

    mapReduce

    在集合中运行 Map Reduce。 请注意,out 的内联选项将返回结果数组而不是集合。

    parallelCollectionScan

    为集合返回 N 个并行游标,允许并行读取整个集合。 返回的结果没有顺序保证。

    reIndex

    重新索引集合上的所有索引警告:reIndex 是一个阻塞操作(索引在前台重建),对于大型集合来说速度很慢。

    rename

    更改现有集合的名称。

    replaceOne

    替换 MongoDB 上的一个文档。

    stats

    获取所有集合的统计信息。

    updateMany

    根据过滤器更新集合中的多个文档。

    updateOne

    根据过滤器更新集合中的单个文档。