原資料為:
{
"_id" : NumberLong(1181675746),
"shard_qty" : 4,
"goods_qty" : 0,
"shop_qty" : 0,
"favorite_qty" : 4,
"favorite_shards" : [
{
"sid" : NumberLong(580),
"favorite_dt" : ISODate("2015-06-26T12:13:06.405+08:00"),
"is_attention" : true
},
{
"sid" : NumberLong(579),
"favorite_dt" : ISODate("2015-06-26T12:13:06.405+08:00"),
"is_attention" : true
},
{
"sid" : NumberLong(578),
"favorite_dt" : ISODate("2015-06-26T12:13:06.405+08:00"),
"is_attention" : true
},
{
"sid" : NumberLong(577),
"favorite_dt" : ISODate("2015-06-26T13:20:48.449+08:00"),
"is_attention" : true
}
]
}
查詢條件為
db.getCollection('web_mem_favorites').findOne(
{
'_id':NumberLong(1181675746),
'favorite_shards.sid': {
'$in':[NumberLong(577),NumberLong(578)]
}
}
,{"favorite_shards":1}
)
想回傳的資料:
{
"_id" : NumberLong(1181675746),
"favorite_shards" : [
{
"sid" : NumberLong(578),
"favorite_dt" : ISODate("2015-06-26T12:13:06.405+08:00"),
"is_attention" : true
},
{
"sid" : NumberLong(577),
"favorite_dt" : ISODate("2015-06-26T13:20:48.449+08:00"),
"is_attention" : true
}
]
}
這個簡單,使用下面的語句就可以只傳回目前符合的陣列:
favorite_shards陣列在回傳時,只傳回第二個陣列元素。
不過這個要提前知道sid:577是第幾個元素。
在mongodb的數組查詢手冊中,並沒有發現能返回滿足自訂條件的數組單元的方法,可以嘗試用程式在返回的結果集上再過濾下favorites_shards資料。
懂題主意思了,以下是修改後的程式碼
結果:
{ "_id" : NumberLong(1181675746), "favorite_shards" : [ { "sid" : NumberLong(578), "favorite_dt" : ISODate("2015-06-26T045 is_attention" : true }, { "sid" : NumberLong(577), "favorite_dt" : ISODate("2015-06-26T0548.449Z"), "is_attattion" : truemm48.449Z"), "is_attattion" : truel.
可以用projection操作符$elemMatch:
$elemMatch的限制是只能傳回數組中的第一個匹配記錄。
我想問一下這個是什麼軟體?
可以使用$unwind查詢,也會傳回多個符合查詢條件的子文檔。