我有幾個「產品」的對象:MongoDB:匹配和排序數組元素?
{ name: 'ProductA',
social_stats: [
{ name: 'facebook',
shares: 60
},
{ name: 'twitter',
shares: 0
}
]
}
{ name: 'ProductB',
social_stats: [
{ name: 'facebook',
shares: 0
},
{ name: 'twitter',
shares: 30
}
]
}
我想查詢「在Facebook上共享大部分產品」和「最共享產品在Twitter上」,總是從最排序,以最少的股票。
所以我對Facebook的第一個查詢看起來像:
db.videos.find({
_id: {
social_stats: {
$elemMatch: {
name: 'facebook'
}
}
}
).sort({
social_stats: {
shares: -1
}
})
產量:
{ name: 'ProductA' }
{ name: 'ProductB' }
這是「正確的」,但是當我運行「嘰嘰喳喳」,而不是,我希望同樣的查詢B-> A,但收到與上述相同的輸出。它似乎並沒有將排序邏輯應用在一起,因爲我打算這樣做,即「通過匹配'twitter'的social_stat元素排序」。
我正在尋找
- 如何改變我的查詢,以反映訂單的應用()來social_stat元素相匹配?
- 如果這些正常的MongoDB查詢是不可能的,這是我可以用聚合框架做的事情嗎?那會是什麼樣子?
- 那麼作爲獎勵,如何編碼與Mongoid的等效查詢?
一些相關的鏈接我看了看:
- 找到this similar post(也意味着我需要使用聚合框架?)
- $elemMatch operator
- Aggregation operators
這應該是直接翻譯成Mongoid的,但[Mongoid和MongoDB Aggregation Framework](http://blog.joshsoftware.com/2013/09/05/mongoid-and-the-mongodb-aggregation-framework/)可能是一個有益的開始。 – Stennie
這正是我最終做的,聚合框架很好地完成了事情。 Mongoid有一個'Model.collection.aggregate()'函數,你可以傳遞一個命令數組來執行(即'[match,unwind,match,sort,project]'),所以它很簡單,將一個MongoDB查詢翻譯成工作與Mongoid。 –