У меня есть 2 коллекции в mongoDB, а именно product
и author
. Теперь в коллекции product
есть объект с именем detail
, который содержит title
и другие сведения, тогда как таблица author
содержит сведения о author
. Теперь я пытаюсь выполнить поиск, который находит как title
, так и author
.. Например: если title
соответствует, должно быть указано details
этого product
, а если author
совпадает, то снова должно отображаться details
этого product
. author_id
— это foreign_key
в коллекции product
, а _id
— это первичный ключ в авторской коллекции.
Ниже моя коллекция
Коллекция Product
{
"_id" : ObjectId("5af2bd44a003533a8abf4e56"),
"product_type_id" : "5ae834807ae0d9538e45ab45",
"date_added" : "2018-03-12 12-3-54",
"status" : 1,
"detail" : {
"title" : "The random title",
"author_id" : "5af2c401a003533a8abf4e57",
"test_id" : 12345,
"description" : "I have a mongoDB collection with f rows",
"mrp" : 200,
"binding" : "sd",
"language" : "English",
"isbn" : NumberLong("9788700631625"),
"isbn_10" : 747532745,
"ean" : 897655,
"pages" : 200
}
}
Это коллекция author
{
"_id" : ObjectId("5af2c401a003533a8abf4e57"),
"name" : "Dan Brown",
"test_id" : 12345
}
Пока мне приходится искать по коллекциям самостоятельно. Но не вместе
Для author
поиска
db.author.aggregate
([{
"$match":
{
"name":"Dan Brown"
}
},
{
"$lookup":
{
"from": "product",
"localField": "test_id",
"foreignField": "detail.test_id",
"as": "users"
}
}
]
).pretty();
Доступ к title
был осуществлен с использованием обычного метода find()
РЕДАКТИРОВАТЬ 1:
Итак, это то, что я пробовал до сих пор. Это правильный подход. Btw, это все еще не работает, хотя
db.product.aggregate
(
[
{
"$match":
{
detail.title : 'The random title'
}
},
{
"$lookup":
{
"from": "author",
"localField": "test_id",
"foreignField": "detail.test_id",
"as": "tb2"
}
},
{
"$unwind": "$tb2"
},
{
"$match":
{
"tb2.name": "agent"
}
}
]
);