MongoDb, найти конкретные объекты, вложенные значения, соответствующие определенному значению

89
10

db.Rooms.find({"name" : "room3"}).pretty()
{
"_id" : ObjectId("57f50608ace5ceb9af033528"),
"name" : "room3",
"userData" : {
"user" : ObjectId("57f4d142ace5ceb9af033521"),
"date" : "Wed Oct 05 2016 15:54:16 GMT+0200"
},
"active" : true,
"users" : [
{
"uid" : ObjectId("57f383a6ace5ceb9af033511")
},
{
"uid" : ObjectId("57f4d142ace5ceb9af033521")
}
],
"messages" : [
{
"msg" : "first test since statement ",
"time" : "Wed Oct 05 2016 15:55:26 GMT+0200",
"user" : ObjectId("57f383a6ace5ceb9af033511")
},
{
"msg" : "second test since statement ",
"time" : "Wed Oct 05 2016 15:57:35 GMT+0200",
"user" : ObjectId("57f4d142ace5ceb9af033521")
},
{
"msg" : "third test since statement ",
"time" : "Wed Oct 05 2016 15:58:11 GMT+0200",
"user" : ObjectId("57f383a6ace5ceb9af033511")
}
]
}

Я совершенно новый для Монго, и у меня возникают проблемы с этим. на самом деле я пробовал самостоятельно один полдня уже:

Я хочу, чтобы найти "ТОЛЬКО" сообщения, которые вставил какой-то пользователь.

Это моя коллекция.

(если это выглядит беспорядочно, я буду ссылаться на изображение) изображение как ссылка

Я хочу показать: все "msg" из "user" с _id: ObjectId ("57f383a6ace5ceb9af033511")

я надеюсь, что кто-то может направить меня или даже рассказать мне, плохо ли эта коллекция или что-то еще..

спасибо ;)

спросил(а) 2021-01-25T15:58:14+03:00 4 месяца, 3 недели назад
1
Решение
63

Похожие вопросы

Как фильтровать массив в подзадаче с помощью MongoDB

Для вас вопрос с использованием агрегатной функции

db.Room.aggregate(
{ $unwind: '$messages'},
{ $match: {'messages.user': {$eq: ObjectId("57f383a6ace5ceb9af033511")}}},
{ $group: {_id: '$_id', list: {$push: '$messages.msg'}}}

Результат:

{
"_id" : ObjectId("57f50608ace5ceb9af033528"),
"list" : [
"first test since statement ",
"third test since statement "
]
}

ответил(а) 2021-01-25T15:58:14+03:00 4 месяца, 3 недели назад
45

Есть еще один вопрос по этой теме:

Как выбрать одно поле в MongoDB?

В методе find вы можете передать другой объект (кроме запроса), который сообщает, какие поля возвращаются.

Для вас это выглядит примерно так:

db.student.find({"_id" : ObjectId("57f50608ace5ceb9af033528")}, {messages:1})

где 1 в {messages:1}= выберите поле "сообщения".

ответил(а) 2021-01-25T15:58:14+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема