У меня есть структура таблицы, как показано ниже.Как получить либо существующий документ, либо новый документ
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6b8"),
"product" : "product1",
"title" : "Alt Summit 1",
"category" : "category1",
"order" : 1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6b9"),
"product" : "product2",
"title" : "Alt Summit 2",
"category" : "category1",
"order" : 2
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6ba"),
"product" : "product1",
"title" : "Alt Summit 1",
"category" : "category1",
"order" : 2,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bb"),
"product" : "product2",
"title" : "Alt Summit 2",
"category" : "category1",
"order" : 1,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bc"),
"product" : "product3",
"title" : "Alt Summit 3",
"category" : "category1",
"order" : 3,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bd"),
"product" : "product4",
"title" : "Alt Summit 4",
"category" : "category1",
"order" : 4
}
Я хотел бы сначала объяснить структуру базы данных.
У меня есть продукты по умолчанию для каждого пользователя на моем веб-сайте, и пользователи могут добавлять свои собственные продукты в список, или они могут переупорядочить существующий список. когда они добавят новый продукт, он будет добавлен их именем пользователя. когда они повторно заказывают продукты, я получаю существующие записи по умолчанию и вставляю, добавляя имя пользователя и изменяя порядок (вы поймете, что если вы заметите вышеприведенные данные).
Теперь как я могу получить продукты для категории, специфичной для пользователя.
Например, если мне нужно получить все продукты для пользователя1 в категории1, то вывод должен быть следующим (отсортировано в соответствии с полем заказа). Если вы внимательно наблюдаете за вышеуказанными данными, тот же продукт повторяется с дополнительным полем с именем added_by и измененным порядком. Я хочу получить заказ пользователя, если пользователь его настроит, если не по умолчанию.
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bb"),
"product" : "product2",
"title" : "Alt Summit 2",
"category" : "category1",
"order" : 1,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6ba"),
"product" : "product1",
"title" : "Alt Summit 1",
"category" : "category1",
"order" : 2,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bc"),
"product" : "product3",
"title" : "Alt Summit 3",
"category" : "category1",
"order" : 3,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bd"),
"product" : "product4",
"title" : "Alt Summit 4",
"category" : "category1",
"order" : 4
}
Я открыт для любого предложения, если я должен изменить структуру таблицы. Но в любой момент времени я мог бы получить выход, о котором я говорил выше.
'db.yourCollection.find ({ "категории": "category1", "added_by": "user1"}). Рода ({ "порядок": 1})' должна возвращать курсор, что вы» искать, нет? – Adam
No @Adam Я все равно должен получать продукты по умолчанию, если пользователь не перенаправил объекты. Вышеприведенный запрос даст мне только пользовательские продукты или пользовательские заказы. Если в той же категории есть один и тот же продукт, который по умолчанию добавлен пользователем, я должен получить заказ пользователя вместе с другими продуктами по умолчанию. – Shravya
Продукты по умолчанию определяются как те, у которых нет ключа '' added_by''? Если да, попробуйте 'db.yourCollection.find ({" $ или ": [{" category ":" category1 "," added_by ":" user1 "}, {" added_by ": {" $ exists ": false} }]}).sort ({"order": 1}) ' – Adam