Вот моя схема:Как сформулировать следующий запрос Mongoose?
var A = new Schema({
active: Boolean
, containers: [{
b: { type: ObjectId, ref: 'B' }
}]
})
var B = new Schema({
c: { type: ObjectId, ref: 'C' }
, d: { type: ObjectId, ref: 'D' }
})
var C = new Schema({ })
var D = new Schema({ })
Основном A
имеет множество контейнеров, которые имеют ссылки на B
и B
имеет ссылку на C
и D
.
Теперь у меня есть идентификатор C
и мне нужен набор D
, которые используются при active
A
с. Возможно ли это? Должен ли я каким-то образом изменить схему?
EDIT: реальная схема здесь
//Mashup has a number of Containers (containerSchema is a sub-doc)
//so that the same Component could belong to two different Containers
var containerSchema = new Schema({
pos: { top: Number, left: Number }
, size: { width: Number, height: Number }
, component: { type: ObjectId, ref: 'Component' }
})
var mashupSchema = new Schema({
name: String
, desc: String
, size: { width: Number, height: Number }
, active: Boolean
, containers: [containerSchema]
})
//I am using 'mongoose-schema-extend' to inherit from componentSchema (waiting for the new PR)
var componentSchema = new Schema({
name: String
, desc: String
}, { collection : 'components', discriminatorKey : '_type' })
//now the various components
var imageComponentSchema = componentSchema.extend({
url: String
})
var textComponentSchema = componentSchema.extend({
text: String
})
var htmlComponentSchema = componentSchema.extend({
html: String
})
//this particular component needs a page and a selector
//(which could live outside it and belong to multiple components)
var webComponentSchema = componentSchema.extend({
page: { type: ObjectId, ref: 'Page' }
, selector: { type: ObjectId, ref: 'Selector' }
})
var pageSchema = new Schema({
name: String
, desc: String
, url: String
, active: { type: Boolean, default: false }
})
var selectorSchema = new Schema({
desc: String
, url: String
, cssPath: String
})
///MODELS
var Mashup = mongoose.model("Mashup", mashupSchema)
var Component = mongoose.model("Component", componentSchema)
var ImageComponent = mongoose.model("ImageComponent", imageComponentSchema)
var TextComponent = mongoose.model("TextComponent", textComponentSchema)
var HtmlComponent = mongoose.model("HtmlComponent", htmlComponentSchema)
var WebComponent = mongoose.model("WebComponent", webComponentSchema)
var Page = mongoose.model("Page", pageSchema)
var Selector = mongoose.model("Selector", selectorSchema)
Но мне все еще нужно B .. Я хочу иметь возможность запрашивать все B. Клиент должен иметь возможность создать новый A, а затем выбрать B из списка и добавить его в A. Я предполагаю, что я может иметь B и вместо того, чтобы нажимать его, извлечь C и D и нажать на них. Mhh – fusio
Предоставьте некоторые реальные данные вместо A, B, C и D ... – Derick
Вы на 100% прав, извините, что пример. [Здесь] (https://groups.google.com/forum/#!topic/mongoose-orm/XUENp02gGWE) Я опубликовал реальный пример. Благодаря :) – fusio