原數(shù)據(jù)為:
{
"_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}
)
想返回的數(shù)據(jù):
{
"_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
}
]
}
小伙看你根骨奇佳,潛力無限,來學(xué)PHP伐。
リーリー
favorite_shards 配列が返される場合、2 番目の配列要素のみが返されます。
ただし、これには、sid:577 がどの要素であるかを事前に知っておく必要があります。
mongodb 配列クエリのマニュアルには、カスタム條件を満たす配列ユニットを返すメソッドはありません。プログラムを使用して、返された結(jié)果セットの favourites_shards データをフィルタリングしてみることができます。
リーリー
質(zhì)問の意味は分かりました、修正コードはこちらです
リーリー結(jié)果:
{ "_id" : NumberLong(1181675746), "favorite_shards" : [ { "sid" : NumberLong(578), "favorite_dt" : ISODate("2015-06-26T0406.405Z"), " is_attention" : true }, { "sid" : NumberLong(577), "favorite_dt" : ISODate("2015-06-26T05
48.449Z"), "is_attention" : true } ] }
射影演算子 $elemMatch を使用できます:
リーリー$elemMatch の制限は、配列內(nèi)で最初に一致したレコードのみを返すことができることです。
$unwind を使用してクエリを?qū)g行すると、クエリ條件を満たす複數(shù)のサブドキュメントが返されます。
リーリー