Это можно решить с помощью индекса с массивом, выбранным в качестве термина. Когда поле, предназначенное для термина, является массивом, создается отдельная запись индекса на элемент массива. Таким образом, если предположить, что существующие коллекции parent
и child
, то
db> CreateIndex({name: "cs", source: Collection("parent"), terms: [{field: ["data", "child"]}]})
{
ref: Index("cs"),
ts: 1569831659780000,
active: true,
serialized: true,
name: 'p',
source: Collection("parent"),
terms: [ { field: [ 'data', 'child' ] } ],
partitions: 1
}
будет работать. Пример использования:
db> Create(Collection("child"), {})
{
ref: Ref(Collection("child"), "244918886014648845"),
ts: 1569831701200000
}
db> Create(Collection("child"), {})
{
ref: Ref(Collection("child"), "244918887478460941"),
ts: 1569831702590000
}
db> Create(Collection("parent"), {data:{child:[Ref(Collection("child"), "244918886014648845"), Ref(Collection("child"), "244918887478460941")]}})
{
ref: Ref(Collection("parent"), "244918956982272520"),
ts: 1569831768880000,
data: {
child: [
Ref(Collection("child"), "244918886014648845"),
Ref(Collection("child"), "244918887478460941")
]
}
}
db> Paginate(Match(Index("cs"), Ref(Collection("child"), "244918886014648845")))
{
data: [
Ref(Collection("parent"), "244918956982272520")
]
}
Любой из дочерних ссылок соответствовал бы.