suchen

Heim  >  Fragen und Antworten  >  Hauptteil

node.js - Wie aktualisiere ich einen Datensatz in Mongo stapelweise und führe einen Einfügevorgang durch, wenn die Daten im Array nicht vorhanden sind?

Zum Beispiel habe ich eine Tag-Tabelle in Mongo und das Datenmodell ist wie folgt

    {
        name: String,
        hot: {
            type: Number,
            default: 0
        },
        create_at: {
            type: Date,
            default: Date.now
        }
    }

Jetzt habe ich eine Reihe von Tag-Namen, wie zum Beispiel ['mongoDB', 'node.js', 'mysql'],
Ich möchte die Beliebtheit stapelweise aktualisieren, und wenn sich herausstellt, dass es kein solches Tag gibt, Fügen Sie es ein, implementieren Sie so etwas wie

mongo.tags.update({
    name:{
        $in:['mongoDB','node.js','mysql']
        }
},{
    $inc:{
        hot:1
    }
},{
    upsert: true,
    multi:true
})

So eine Operation, aber jetzt, wenn ich diesen Befehl ausführe, werden leere Daten hinzugefügt

Die Art und Weise, wie ich sie jetzt umsetze, besteht darin, zuerst eine Abfrage durchzuführen und diejenigen zu aktualisieren, die abgefragt werden können, und diejenigen einzufügen, die abgefragt werden können Der Vorgang kann nicht abgefragt werden, aber ein solcher Vorgang erfordert das mehrfache Durchlaufen des Tag-Arrays vom Code aus, und die Leistung ist nicht gut. Ich würde gerne fragen, ob Experten eine bessere Lösung haben.

淡淡烟草味淡淡烟草味2766 Tage vor1013

Antworte allen(2)Ich werde antworten

  • ringa_lee

    ringa_lee2017-05-24 11:37:41

    1、您的update operation的语句没问题;

    2、您所说的新增一个空的数据,是因为没有查找到满足条件的document,并且设置upsert为true,所以插入了一个包含feild hot的document。

    不妨检查一下自己的collection的document情形,再试试。您的update operation没有发现问题。

    供参考。

    Love MongoDB! Have fun!


    2017MongoDB中文社区北京用户组大会在即!扫码报名中!

    Antwort
    0
  • 某草草

    某草草2017-05-24 11:37:41

    mongodb里面用upsert应该可以实现
    upsert({},{},true) true表示没有就写入,有就更新;
    可以参考官方支持萌阔论坛:
    http://forum.foxera.com/mongo...

    Antwort
    0
  • StornierenAntwort