原数据为:
{
"_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
}
]
}
Ini adalah mudah. Gunakan pernyataan berikut untuk mengembalikan tatasusunan padanan semasa sahaja:
Apabila mengembalikan tatasusunan favorite_shards, hanya elemen tatasusunan kedua dikembalikan.
Tetapi ini memerlukan mengetahui terlebih dahulu unsur sid:577 yang manakah.
Dalam manual pertanyaan tatasusunan mongodb, tiada kaedah yang boleh mengembalikan unit tatasusunan yang memenuhi syarat tersuai Anda boleh cuba menggunakan atur cara untuk menapis data favorites_shards pada set hasil yang dikembalikan.
Saya faham maksud soalan, berikut ialah kod yang diubah suai
Keputusan:
{ "_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-26T0548.449Z" ), "is_attention" : benar } ] }
Anda boleh menggunakan operator unjuran $elemMatch:
Penghadan $elemMatch ialah ia hanya boleh mengembalikan rekod padanan pertama dalam tatasusunan.
Saya ingin bertanya apakah perisian ini?
Anda boleh menggunakan $unwind untuk membuat pertanyaan dan berbilang subdokumen yang memenuhi syarat pertanyaan akan dikembalikan.