[{
"username":"user1",
"products":[
{"productID":1,"itemCode":"CODE1"},
{"productID":2,"itemCode":"CODE1"},
{"productID":3,"itemCode":"CODE2"},
]
},
{
"username":"user2",
"products":[
{"productID":1,"itemCode":"CODE1"},
{"productID":2,"itemCode":"CODE2"},
]
}]
Я хочу найти все «productID» для «products» для «user1», чтобы «itemCode» для продукта был «CODE1».
Какой запрос в mongoDB нужно написать для этого?
2 ответа
Если вам нужно выполнить только одно условие, то достаточно точечной записи. В оболочке Mongo:
db.col.find({"products.itemCode" : "CODE1", "username" : "user1"})
Это вернет всех пользователей с вложенными объектами продукта, имеющими itemCode "CODE1".
Обновлено
Сначала не было ясно о ваших требованиях, но это должно быть так.
Если вы хотите, чтобы каждый продукт был отдельной записью, вам нужно будет использовать совокупную структуру. Сначала разделите записи в массиве с помощью $unwind
, затем используйте $match
для своих условий.
db.col.aggregate(
{ $unwind: "$products" },
{ $match: { username: "user1", "products.itemCode": "CODE1" } }
);
Ответ:
{ "_id" : ObjectId("57cdf9c0f7f7ecd0f7ef81b6"), "username" : "user1", "products" : { "productID" : 1, "itemCode" : "CODE1" } }
{ "_id" : ObjectId("57cdf9c0f7f7ecd0f7ef81b6"), "username" : "user1", "products" : { "productID" : 2, "itemCode" : "CODE1" } }
Для этого вам понадобится несколько фильтров, как показано ниже, что является не чем иным, как условием AND
(при условии, что имя вашей коллекции - collection1
)
db.collection1.find({"username":"user1", "products.itemCode" : "CODE1"})
Похожие вопросы
Связанные вопросы
Новые вопросы
mongodb
MongoDB - это масштабируемая, высокопроизводительная база данных NoSQL с открытым исходным кодом, ориентированная на документы. Он поддерживает большое количество языков и платформ разработки приложений. Вопросы по администрированию сервера можно задать на https://dba.stackexchange.com.