| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package com.weEat.migrations
- import org.mongodb.scala.MongoDatabase
- import com.mongodb.client.model._
- import org.mongodb.scala.model.Filters._
- import org.mongodb.scala.model.Field
- import org.mongodb.scala.bson.{BsonArray,BsonDocument}
- import com.weEat.shared.models.{FoodNodeId,RecipeNodeId}
- import com.weEat.models.{FoodNodeView,FoodNode,RecipeVersion}
- import scala.concurrent.ExecutionContext
- object RecipeVersionCollection extends Migration {
-
- implicit val ec: ExecutionContext = ExecutionContext.global
- private def typ = `type` _
- def execute(db: MongoDatabase) = createRecipeVersionCollection(db)
- .flatMap((_) => createFoodView(db))
- def createRecipeVersionCollection(db: MongoDatabase) =
- db.createCollection(RecipeVersion.collectionName).head().flatMap({ (_) =>
- val foods = db.getCollection[RecipeNodeId](FoodNode.collectionName)
- foods.aggregate(Seq(
- Aggregates.`match`(equal("_t", "RecipeNodeId")),
- Aggregates.addFields(Field("vid", "$_id")),
- Aggregates.out(RecipeVersion.collectionName)
- )).head().flatMap({ (_) =>
- val foods = db.getCollection[FoodNodeId](FoodNode.collectionName)
- foods.aggregate(Seq(
- Aggregates.`match`(equal("_t", "RecipeNodeId")),
- Aggregates.project(Projections.fields(
- Projections.include("_id", "uid", "name"),
- Projections.computed("headVid", "$_id"),
- Projections.computed("_t", "RecipeMetaNodeId")
- )),
- Aggregates.merge(FoodNode.collectionName)
- ))
- .head()
- })
- })
- def createFoodView(db: MongoDatabase) =
- db.createView(
- FoodNodeView.collectionName,
- FoodNode.collectionName,
- Seq(
- Aggregates.lookup(
- RecipeVersion.collectionName,
- "headVid",
- "_id",
- "recipe"
- ),
- Aggregates.addFields(Field("recipe._id", "$_id")),
- Aggregates.replaceRoot(
- BsonDocument(("$ifNull", BsonArray(
- BsonDocument(("$first", "$recipe")),
- "$$ROOT"
- )))
- ),
- Aggregates.project(Projections.exclude("recipe")),
- )
- ).head()
- }
|