MongoDB Group by / Map уменьшить - PullRequest
0 голосов
/ 09 марта 2012

Привет, ребята, у меня есть существующая схема обмена сообщениями в mongoDB, которая хорошо работает.

{       
    "_id" : ObjectId("4f596b4543658618c0000004"),
    "user_id" : ObjectId("4f4c6c5143658618dc000002"),
    "body" : "message body",
    "from_user" : {
        "_id" : ObjectId("4f4c6b6943658618dc000001"),
        "name" : "Mister Quin"
    },
    "created_at" : ISODate("2012-03-09T02:30:29Z")
}

Теперь я хочу отобразить список людей, которым отправил сообщение данный пользователь. Вы можете думать об этом как о входящих сообщениях, которые объединяют сообщения, которые я отправитель и получатель, которые обозначены как "user_id" и "from_user._id" соответственно. Таким образом, в сущности, группа уникальных сообщений между двумя сторонами из коллекции сообщений. Буду признателен за любую помощь, которую я могу получить. Я знаю, что это, вероятно, проблема уменьшения карты.

Я использую монгоид в качестве ORM, но это не должно иметь большого значения.

Спасибо.

1 Ответ

1 голос
/ 09 марта 2012

Вы можете использовать группу и группу по from_user._id и user_id.

db.messages.group({key: {'from_user._id': 1, user_id: 1},
                   initial: {sum: 0}, 
                   reduce: function(doc, prev) {prev.sum += 1},
                   cond: {from_user._id: ObjectId("4f4c6b6943658618dc000001")})

Это вернет список всех пользователей, отправленных Мистером Куином, и количество раз, когда каждый из них был отправлен. Убедитесь, что у вас есть индекс "from_user._id"

...