2 回答

TA貢獻(xiàn)1829條經(jīng)驗 獲得超7個贊
我用的是mongoose,不過也可以直接寫mongodb的查詢
var GoodSchema = new Schema({ name: String});
var ShopSchema = new Schema({
userId: Schema.ObjectId,
name: String,
point: {type: [Number], index: '2d'},
goods: [GoodSchema],
tags: {},
categorys: [String]
});
現(xiàn)在我想要根據(jù)給定的point 和商品名稱,查找某個點附近的店家里面誰有賣這里商品的
原先查詢語句是寫成
var userPoint = [118.4444, 24.4444]
var content = "耳機(jī)"
var regexp = new Regexp(content);
ShopModel.find({point: {$near: userPoint}, goods: {$elemMatch: {name: regexp}}}).limit(100).exec(cb)
然后發(fā)現(xiàn)返回過來的商店里面帶有的商品信息(goods)是所有的商品信息,不是我想要的只有匹配的商品的信息(mongodb 默認(rèn)返回整個文檔,除非你提供了projection)
接著去看了下mongodb的官方文檔的projection里面的$,$elemMatch
但是根據(jù)官方文檔里面講的,無論$,還是$elemMatch都是返回數(shù)組里面第一個匹配元素,并不能像我所需要的返回所有匹配的元素
然后還大概了解了下 map/reduce, 但是不知道是不是該用它,還是有其他什么解決方案
(主要是性能考慮,如果采用map/reduce 顯然對數(shù)組里面的每個元素都進(jìn)行了一次過濾,然后如果說商家數(shù)量多點,商品數(shù)量多點,會不會死的比較慘。。。)
================
還是說我這個數(shù)據(jù)結(jié)構(gòu)設(shè)計不合理,把商品單獨出來
var GoodSchema = new Schema({ name: String, shopPoint: {type: [Number], index: '2d'}, shopId: Schema.ObjectId});
var ShopSchema = new Schema({
userId: Schema.ObjectId,
name: String,
point: {type: [Number], index: '2d'},
tags: {},
categorys: [String]
});
- 2 回答
- 0 關(guān)注
- 1568 瀏覽
添加回答
舉報