第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

MongoDB的$in子句保證訂單

MongoDB的$in子句保證訂單

忽然笑 2019-06-14 16:54:00
MongoDB的$in子句保證訂單當(dāng)使用MongoDB時(shí)$in子句,返回的文檔的順序總是與數(shù)組參數(shù)的順序相對(duì)應(yīng)嗎?
查看完整描述

3 回答

?
當(dāng)年話(huà)下

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊

使用聚合查詢(xún)的另一種方法僅適用于MongoDB verion>3.4 -

功勞歸功于這個(gè)美好的博客帖子.

按此順序獲取的示例文檔-

var order = [ "David", "Charlie", "Tess" ];

這個(gè)問(wèn)題-

var query = [
             {$match: {name: {$in: order}}},
             {$addFields: {"__order": {$indexOfArray: [order, "$name" ]}}},
             {$sort: {"__order": 1}}
            ];var result = db.users.aggregate(query);

另一篇文章引用了解釋這些聚合運(yùn)算符的文章-

“$addField”階段在3.4中是新的,它允許您在不了解所有其他現(xiàn)有字段的情況下對(duì)現(xiàn)有文檔“$project”新字段。新的“$indexOfArray”表達(dá)式返回給定數(shù)組中特定元素的位置。

基本上addToSet運(yùn)算符追加一個(gè)新的order字段到每個(gè)文檔,當(dāng)它找到它時(shí),order字段表示我們提供的數(shù)組的原始順序。然后,我們簡(jiǎn)單地根據(jù)這個(gè)字段對(duì)文檔進(jìn)行排序。


查看完整回答
反對(duì) 回復(fù) 2019-06-14
?
繁星淼淼

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊

如果你不想用aggregate,另一個(gè)解決方案是使用find然后使用array#sort:

如果$in值是與數(shù)字類(lèi)似的原始類(lèi)型,您可以使用如下方法:

var ids = [4, 2, 8, 1, 9, 3, 5, 6];MyModel.find({ _id: { $in: ids } }).exec(function(err, docs) {
    docs.sort(function(a, b) {
        // Sort docs by the order of their _id values in ids.
        return ids.indexOf(a._id) - ids.indexOf(b._id);
    });});

如果$in值是非原始類(lèi)型,如ObjectId,則需要另一種方法,如indexOf在這種情況下通過(guò)引用進(jìn)行比較。

如果使用Node.js4.x+,可以使用Array#findIndexObjectID#equals若要通過(guò)更改sort職能:

docs.sort((a, b) => ids.findIndex(id => a._id.equals(id)) - 
                    ids.findIndex(id => b._id.equals(id)));

或使用任何Node.js版本,并帶有下劃線(xiàn)/存檔findIndex:

docs.sort(function (a, b) {
    return _.findIndex(ids, function (id) { return a._id.equals(id); }) -
           _.findIndex(ids, function (id) { return b._id.equals(id); });});


查看完整回答
反對(duì) 回復(fù) 2019-06-14
  • 3 回答
  • 0 關(guān)注
  • 1846 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)