mongodb实现exists去重
天蓬老师
天蓬老师 2017-05-02 09:19:34
0
2
820
db.getCollection('user').save({"uid":"1123", "logTime":ISODate('2016-05-23 11:11:23')});
db.getCollection('user').save({"uid":"1124", "logTime":ISODate('2016-05-23 05:11:23')});
db.getCollection('user').save({"uid":"1125", "logTime":ISODate('2016-05-23 08:11:23')});
db.getCollection('user').save({"uid":"1126", "logTime":ISODate('2016-05-23 09:12:23')});
db.getCollection('user').save({"uid":"1127", "logTime":ISODate('2016-05-23 11:23:23')});
db.getCollection('user').save({"uid":"1134", "logTime":ISODate('2016-05-23 11:11:23')});
db.getCollection('user').save({"uid":"1123", "logTime":ISODate('2016-05-21 11:11:23')});
db.getCollection('user').save({"uid":"1125", "logTime":ISODate('2016-05-22 11:11:23')});
db.getCollection('user').save({"uid":"2343", "logTime":ISODate('2016-04-23 11:11:23')});
db.getCollection('user').save({"uid":"9873", "logTime":ISODate('2016-04-23 11:11:23')});
db.getCollection('user').save({"uid":"4321", "logTime":ISODate('2016-04-20 11:11:23')});

上面模拟一些数据 生产一个user集合来表示用户登录状况. 现在我想查询2016-05-23的新用户数(5-23号登录的用户但是在小于5-23号的记录中不存在) 比如第一条记录uid='1123'在5-21也登录过 那么uid='1123'就不算在5-23登录的用户数中

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

membalas semua(2)
Ty80

Mongodb tidak menyokong penyertaan, kaedah berikut boleh mencapai tujuan anda

var list = [];
db.getCollection('user').find({'logTime': {'$lt': ISODate('2016-05-23')}}, {'_id': 0, 'uid': 1}).forEach(function(item){
    list.push(item['uid']);
});

db.getCollection('user').find({'logTime': {'$gte': ISODate('2016-05-23')}, 'uid': {'$nin': list}});
淡淡烟草味

Pengguna yang log masuk pada 5-23 tidak wujud dalam rekod kurang daripada 5-23

Pertama sekali, reka bentuk ini mempunyai kelemahan yang jelas.

  1. Kecacatan prestasi: Terdapat terlalu banyak rekod kurang daripada 1 tahun, 2 tahun dan 10 tahun yang lalu semuanya kurang daripada 23 Mei Sejauh mana anda perlu mengimbas. Ia mungkin baik jika terdapat hanya beberapa hari data pada mulanya, tetapi apabila bilangan log meningkat, program anda akan berjalan lebih keras dan lebih keras. Dan proses akan berjalan dengan cepat. Pada masa ini, anda akan berfikir untuk memadamkan log lama, dan masalah berikut akan timbul.

  2. Sukar untuk diselenggara: Log log masuk mempunyai volum yang besar dan tidak begitu berguna kepada orang biasa, dan hanya sedikit orang yang menyimpannya secara kekal. Boleh dibayangkan bahawa apabila anda memadamkan log dari setahun yang lalu, kumpulan baru pengguna baharu akan dilahirkan, kerana log log masuk pertama mereka mungkin telah dipadamkan oleh anda.

Selain itu, bukankah pengguna baharu secara amnya dirujuk sebagai pengguna baharu yang didaftarkan?
Jika hari log masuk pertama mesti dikira sebagai masa pengguna baharu, maka disyorkan untuk mereka bentuk semula. Sebagai contoh, berdasarkan jadual pengguna, cari pengguna yang belum log masuk, dan kemudian kerap mencari log log masuk mereka Setelah ditemui, rekod tarikh log masuk pertama ke dalam jadual pengguna. Dengan cara ini, secara teorinya, tidak kira berapa lama masa yang diambil, jumlah pengguna yang telah mendaftar tetapi tidak pernah log masuk tidak akan banyak berubah (bukan tidak akan ada perubahan, memang ada pengguna yang telah mendaftar tetapi tidak pernah log masuk. dalam, tetapi mereka sedikit selepas semua), Prestasi program anda tidak akan merosot dari semasa ke semasa.

Saya tidak menjawab soalan anda secara langsung, kerana pengalaman biasa saya memberitahu saya untuk menyelesaikan masalah secara asas dan tidak menambal berdasarkan kesilapan, yang hanya akan memburukkan lagi keadaan.

PS: Adakah terdapat masalah dengan logik ayat terakhir anda?

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan