Запрос MongoDB для вычитания одного значения записи с другим - PullRequest
0 голосов
/ 21 ноября 2018

Я работал над извлечением полей value всех записей и вычитал его из следующего значения записи.Вот как выглядят мои записи:

{
  "name":"abc",
  "value":10
},
{
  "name":"xyz",
  "value":20
},
{
 "name":"pqr",
 "value":30
}

И я прошел через эти запросы, чтобы достичь этого, но не получил желаемого результата.

Запрос:

db.myc.aggregate([{
    $unwind: "$value"
}, {
    $group: {
        _id: "$name",
        value1: {
            $first: "$value"
        },
        value2: {
            $last: "$value"
        },
    }
}, {
    $project: {
        Output: {
            $subtract: ["$value1", 10]
        }
    }
}]);

Получил вывод наподобие:

{ "_id" : "abc", "Output" : 0 }
{ "_id" : "xyz", "Output" : 10 }
{ "_id" : "pqr", "Output" : 20 }

Требуемый вывод, который я искал, первая запись значение должно остаться таким же, что равно 10, а значение следующей записи (20) должно быть вычтено изтретье значение записи (30).Так что все значения полей останутся 10. (Входные данные всегда будут иметь 10 различий со следующими данными).

Может кто-нибудь, пожалуйста, дайте мне знать, как этого достичь ???

1 Ответ

0 голосов
/ 21 ноября 2018

Входы:

    {
         "_id" : ObjectId("5bf52fe30d11f12257d430bf"),
    "name" : "fff",
   "value" : 50
    },
   {
   "_id" : ObjectId("5bf52fe30d11f12257d430c0"),
    "name" : "gd",
   "value" : 60
   },
  {
  "_id" : ObjectId("5bf52fe30d11f12257d430c1"),
  "name" : "ffagf",
   "value" : 70
   }

Используйте следующий запрос, чтобы получить желаемый результат:

Примечание: самое высокое значение будет сохранено как 0 в конце.

  db.myc.find().forEach(
  function(doc){
  var n = db.myc.findOne({_id:{"$gt":doc._id}}); 
  var diff = n.value-doc.value; 
   print(tojson(diff)); 
 });

Вывод:

10
10
0

Обратитесь к этому ответу: Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...