Rumah > Soal Jawab > teks badan
Json asal
{
"_id" : ObjectId("58b3a8dc96fbc7cfb8287093"),
"name" : "《地下水质量标准》",
"GBNumber" : "GB/T 14848-93",
"dataEntryClerk" : "handsomeboy",
"lastModified" : "Fri Feb 27 2017 12:03:40 GMT+0800",
"contents" : [
{
"standardID" : "9527-01",
"unit" : "mg/L",
"classifications" : [
{
"level" : "I",
"upperLimit" : "0",
"lowerLimit" : "50"
},
{
"level" : "II",
"upperLimit" : "50",
"lowerLimit" : "150"
},
{
"level" : "III",
"upperLimit" : "150",
"lowerLimit" : "250"
},
{
"level" : "IV",
"upperLimit" : "250",
"lowerLimit" : "350"
},
{
"level" : "V",
"upperLimit" : "350",
"lowerLimit" : "-1"
}
]
},
{
"standardID" : "7439-89-6",
"unit" : "mg/L",
"classifications" : [
{
"level" : "I",
"upperLimit" : "0",
"lowerLimit" : "0.1"
},
{
"level" : "II",
"upperLimit" : "0.1",
"lowerLimit" : "0.2"
},
{
"level" : "III",
"upperLimit" : "0.2",
"lowerLimit" : "0.3"
},
{
"level" : "IV",
"upperLimit" : "0.3",
"lowerLimit" : "0.4"
},
{
"level" : "V",
"upperLimit" : "0.5",
"lowerLimit" : "-1"
}
]
}
]
}
Hasil yang anda ingin tanya:
{
"contents" : [
{
"standardID" : "9527-01",
"unit" : "mg/L",
"classifications" : [
{
"level" : "I",
"upperLimit" : "0",
"lowerLimit" : "50"
},
{
"level" : "II",
"upperLimit" : "50",
"lowerLimit" : "150"
},
{
"level" : "III",
"upperLimit" : "150",
"lowerLimit" : "250"
},
{
"level" : "IV",
"upperLimit" : "250",
"lowerLimit" : "350"
},
{
"level" : "V",
"upperLimit" : "350",
"lowerLimit" : "-1"
}
]
}
]
}
Bolehkah anda beritahu saya cara menulis db.xxx.find()
怪我咯2017-05-02 09:27:22
Saya ingin membuat ulasan terlebih dahulu:
Tanya soalan dan siarkan contoh masalah boleh dihasilkan yang diminimumkan Jika anda menyiarkan dokumen yang begitu panjang, semua orang akan bosan membacanya.
Apa yang anda perlukan sebenarnya ialah memulangkan beberapa dokumen tertentu dalam tatasusunan , bukan keseluruhan tatasusunan.
1 Jika anda hanya perlu mengembalikan satu elemen dalam tatasusunan
db.xxx.find(
{'contents.standardID': '9527-01'},
{contents: {$elemMatch: {standardID: '9527-01'}}, _id: 0}
)
Baris pertama ialah syarat pertanyaan, dan baris kedua ialah syarat penapis. Anda boleh melihat bahawa pengendali juga boleh digunakan dalam keadaan penapis. Walau bagaimanapun, pengendali ini hanya akan mengembalikan elemen pertama yang memenuhi syarat dan memerlukan MongoDB versi 2.2 atau lebih tinggi .
Atau gunakan $
pemilih subskrip:
db.xxx.find(
{'contents.standardID': '9527-01'},
{'contents.$': 1, _id: 0}
)
Syarat pertanyaan dalam contoh di atas juga boleh digunakan $elemMatch
.
Jika anda perlu mengembalikan berbilang elemen padanan dalam tatasusunan:
2 $unwind
beroperasi pada $unwind
sebagai strim dokumen bebas dengan menggunakan contents
Untuk kod, lihat jawapan @bguo.
Tetapi ini boleh menyebabkan masalah prestasi jika tatasusunan anda besar.
3 $filter
Ini ialah operator baharu dalam versi 3.2
, digunakan untuk menapis kandungan yang dikembalikan.
db.xxx.aggregate(
{$match: {'contents.standardID': '9527-01'}},
{$project: {
contents: {$filter: {
input: '$contents',
as: 'contents',
cond: {$eq: ['$$contents.standardID', '9527-01']}
}},
_id: 0
}}
)
Sudah tentu anda juga boleh menggunakan $redact
(versi 2.6), atau mapReduce()
dan banyak kaedah lain.
为情所困2017-05-02 09:27:22
Syarat pertanyaan. Contohnya nama
db.xxx.find({"name" : "《地下水质量标准》" } ,function(err, data){
if(data){
console.log(data.contents)
}
})
给我你的怀抱2017-05-02 09:27:22
Satu kaedah pelaksanaan: menggunakan Agregat MongoDB.
1. Mula-mula gunakan $unwind pada kandungan yang mengandungi tatasusunan
2. Kemudian gunakan $match untuk menggunakan syarat penapisan
3 Akhir sekali, gunakan $project untuk mengekalkan medan yang diperlukan
Rujuk kod di bawah
db.test1.aggregate([
{$unwind : "$contents"},
{$match : { name : "《地下水质量标准》", "contents.standardID" : "9527-01"}},
{ $project : { contents : 1 , _id : 0 }}
])
Untuk rujukan.
Sayangi MongoDB!
------------------------ Pemisah cantik------------------ --- ----------Komuniti Cina MongoDB mempunyai banyak aktiviti luar talian, sila klik di bawah:
Perbincangan Pedang Huashan 2017|Komuniti Cina MongoDB
Stesen Hangzhou pada bulan Mac akan datang tidak lama lagi! ! ! Rakan-rakan yang berminat sila daftar segera! ! !
给我你的怀抱2017-05-02 09:27:22
db.xxx.find({"contents.standardID": "9527-01"}, {contents: 1})
_id字段会自动输出,就忽略吧