Как переписать текущий документ mongodb - PullRequest
1 голос
/ 06 января 2020

У меня есть команда агрегирования, и мне нужно перезаписать текущие документы;

db.collection.aggregate([
  {
        $project: {
            class: "Apples",
            imageUrl: { $substr: [ "$imageUrl", 0, { $indexOfBytes: [ "$imageUrl", "\n" ] } ] }
        }
    }
])

Collection:
{
id:...
class:"Apples"
imageUrl:"..."
}

Есть несколько документов, которые необходимо обновить. это то, что я сейчас добавил к вышеуказанной команде, но она не работает.

.forEach( doc => db.product.updateOne( { _id: doc._id }, { $set: { imageUrl: doc.imageUrl } } ) )

Заранее спасибо!

1 Ответ

3 голосов
/ 06 января 2020

Вы можете запустить $ out ( заменяет всю существующую коллекцию результатом агрегации):

db.collection.aggregate([
    {
        $project: {
            class: "Apples",
            imageUrl: { $substr: [ "$imageUrl", 0, { $indexOfBytes: [ "$imageUrl", "\n" ] } ] }
        }
    },
    { $out: "collection" }
])

или новый $ merge оператор («объединяет» результаты агрегации с существующими документами):

db.collection.aggregate([
    {
        $project: {
            class: "Apples",
            imageUrl: { $substr: [ "$imageUrl", 0, { $indexOfBytes: [ "$imageUrl", "\n" ] } ] }
        }
    },
    { $merge: { into: "collection", on: "_id", whenMatched: "replace", whenNotMatched: "insert" } }
])
...