เป็นไปได้ใน mongo db เพื่อเลือกเอกสารของคอลเลกชันเช่นใน SQL:
SELECT * FROM collection WHERE _id IN (1,2,3,4);
หรือถ้าฉันมี_id array
ฉันต้องเลือกทีละรายการแล้วจัดองค์ประกอบarray/object
ของผลลัพธ์ใหม่?
เป็นไปได้ใน mongo db เพื่อเลือกเอกสารของคอลเลกชันเช่นใน SQL:
SELECT * FROM collection WHERE _id IN (1,2,3,4);
หรือถ้าฉันมี_id array
ฉันต้องเลือกทีละรายการแล้วจัดองค์ประกอบarray/object
ของผลลัพธ์ใหม่?
คำตอบ:
ง่าย :)
db.collection.find( { _id : { $in : [1,2,3,4] } } );
นำมาจาก: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in
O(log(n) * m)
ที่n
มีขนาดของคอลเลกชันและm
เป็นจำนวนของรหัสผ่าน?
เนื่องจาก mongodb ใช้bson
และสำหรับ bson เป็นประเภทแอตทริบิวต์ที่สำคัญ และเนื่องจาก_id
เป็นObjectId
คุณต้องใช้เช่นนี้
db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );
และในการmongodb compass
ใช้งานเช่นนี้:
{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }
หมายเหตุ: objectId ในสตริงมี24
ความยาว
หากคุณต้องการค้นหาโดยผู้ใช้และตามฟิลด์อื่นอย่างมีเงื่อนไขคุณสามารถทำได้อย่างง่ายดายเช่นด้านล่างด้วยตัวดำเนินการสเปรดและเทอร์นารีโดยใช้aggregate
และmatch
const p_id = patient_id;
let fetchingReports = await Reports.aggregate([
...(p_id
? [
{
$match: {
createdBy: mongoose.Types.ObjectId(id),
patient_id: p_id,
},
},
]
: [
{
$match: {
createdBy: mongoose.Types.ObjectId(id),
},
},
คุณสามารถลองสิ่งนี้
var ids = ["5883d387971bb840b7399130","5883d389971bb840b7399131","5883d38a971bb840b7399132"];
var oids = [];
ids.forEach(function(item){
oids.push(new ObjectId(item));
});
.find({ _id: {$in : oids}})
สิ่งนี้ไม่เกี่ยวข้องกับคำค้นหา mongo ฉันคุ้นเคยกับ SQL และใช้ Studio3T IDE เพื่อสอบถามฐานข้อมูล mongo โดยใช้ SQL หากคุณเป็นเหมือนฉันฉันต้องการชี้ให้เห็นว่าค่ารหัสจำเป็นต้องพิมพ์ ดังนั้นแบบสอบถามจะมีลักษณะดังนี้:
SELECT _id from <collectionName>
WHERE _id = ObjectId("5883d387971bb840b7399130");