Docs Menu

MongoDB Atlas์—์„œ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ - ํ•จ์ˆ˜

์ด ํŽ˜์ด์ง€์˜ ์˜ˆ์‹œ์—์„œ๋Š” ํ•จ์ˆ˜์—์„œ MongoDB ์ฟผ๋ฆฌ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Atlas ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋ฌธ์„œ๋ฅผ ์ฝ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌ ํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ , ํ‘œํ˜„์‹ ์ผ์น˜ ํ•„ํ„ฐ๋ฅผ ์“ฐ๊ธฐ (write) ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์ž , ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋‹ค ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋“ค์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ํŒจํ„ด ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์„ธ์š”.

์ด ํŽ˜์ด์ง€์˜ ์˜ˆ์—์„œ๋Š” ์˜จ๋ผ์ธ ์Šคํ† ์–ด์—์„œ ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ํ’ˆ๋ชฉ์„ ๋ชจ๋ธ๋งํ•œ store.items ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ•ญ๋ชฉ์—๋Š” name, ์žฌ๊ณ  quantity ๋ฐ ๊ณ ๊ฐ reviews์˜ ๋ฐฐ์—ด์ด ์žˆ์Šต๋‹ˆ๋‹ค.

store.items์˜ JSON schema
{
"title": "Item",
"required": ["_id", "name", "quantity", "reviews"],
"properties": {
"_id": { "bsonType": "objectId" },
"name": { "bsonType": "string" },
"quantity": { "bsonType": "int" },
"reviews": {
"bsonType": "array",
"items": {
"bsonType": "object",
"required": ["username", "comment"],
"properties": {
"username": { "bsonType": "string" },
"comment": { "bsonType": "string" }
}
}
}
}
}

ํ•จ์ˆ˜์—์„œ ์ฝ”๋“œ ์Šค๋‹ˆํŽซ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € MongoDB ์ปฌ๋ ‰์…˜ ํ•ธ๋“ค์„ ์ธ์Šคํ„ด์Šคํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

exports = function() {
const mongodb = context.services.get("mongodb-atlas");
const itemsCollection = mongodb.db("store").collection("items");
const purchasesCollection = mongodb.db("store").collection("purchases");
// ... paste snippet here ...
}

collection.findOne() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ๋ฌธ์„œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ํ•จ์ˆ˜ ์Šค๋‹ˆํŽซ์€ items ์ปฌ๋ ‰์…˜์—์„œ quantity๊ฐ€ 25๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๋‹จ์ผ ๋ฌธ์„œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค:

const query = { "quantity": { "$gte": 25 } };
const projection = {
"title": 1,
"quantity": 1,
}
return itemsCollection.findOne(query, projection)
.then(result => {
if(result) {
console.log(`Successfully found document: ${result}.`);
} else {
console.log("No document matches the provided query.");
}
return result;
})
.catch(err => console.error(`Failed to find document: ${err}`));

collection.find() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฌธ์„œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ํ•จ์ˆ˜ ์Šค๋‹ˆํŽซ์€ items ์ปฌ๋ ‰์…˜์—์„œ ๋ฆฌ๋ทฐ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋Š” ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ์ฐพ์•„ _id ํ•„๋“œ๋ฅผ ์ƒ๋žตํ•˜๊ณ  name์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

const query = { "reviews.0": { "$exists": true } };
const projection = { "_id": 0 };
return itemsCollection.find(query, projection)
.sort({ name: 1 })
.toArray()
.then(items => {
console.log(`Successfully found ${items.length} documents.`)
items.forEach(console.log)
return items
})
.catch(err => console.error(`Failed to find documents: ${err}`))

collection.count() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋ ‰์…˜์˜ ๋ฌธ์„œ ๊ฐœ์ˆ˜๋ฅผ ์ง‘๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ง‘๊ณ„ํ•  ๋ฌธ์„œ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฉ”์„œ๋“œ๋Š” ์ปฌ๋ ‰์…˜์˜ ๋ชจ๋“  ๋ฌธ์„œ ์ˆ˜๋ฅผ ์ง‘๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํ•จ์ˆ˜ ์Šค๋‹ˆํŽซ์€ items ์ปฌ๋ ‰์…˜์—์„œ ๋ฆฌ๋ทฐ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋Š” ๋ฌธ์„œ ์ˆ˜๋ฅผ ์ง‘๊ณ„ํ•ฉ๋‹ˆ๋‹ค:

return itemsCollection.count({ "reviews.0": { "$exists": true } })
.then(numDocs => console.log(`${numDocs} items have a review.`))
.catch(err => console.error("Failed to count documents: ", err))

์ปฌ๋ ‰์…˜์„ ์ฟผ๋ฆฌํ•˜์—ฌ ์ง€์ •๋œ ID๊ฐ€ ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MongoDB๋Š” ์ž๋™์œผ๋กœ ๊ฐ ๋ฌธ์„œ์˜ ID๋ฅผ ๋ฌธ์„œ์˜ _id ํ•„๋“œ์— ObjectId ๊ฐ’์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

{ "_id": <ObjectId> }

์˜ˆ์‹œ

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” _id ๊ฐ’์ด 5ad84b81b8b998278f773c1b์ธ ์ปฌ๋ ‰์…˜์˜ ๋ฌธ์„œ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

{ "_id": BSON.ObjectId("5ad84b81b8b998278f773c1b") }

์ปฌ๋ ‰์…˜์„ ์ฟผ๋ฆฌํ•˜์—ฌ ํŠน์ • ๋‚ ์งœ ๊ฐ’์ด ์žˆ๋Š” ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ๋‚ ์งœ ๋ฒ”์œ„ ๋‚ด์˜ ๋ฌธ์„œ๋ฅผ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{ "<Date Field Name>": <Date | Expression> }

์˜ˆ์‹œ

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” createdAt ๋‚ ์งœ๊ฐ€ 2019๋…„ 1์›” 23์ผ์ธ ์ปฌ๋ ‰์…˜์˜ ๋ฌธ์„œ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

{ "createdAt": new Date("2019-01-23T05:00:00.000Z") }

์˜ˆ์‹œ

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” createdAt ๋‚ ์งœ๊ฐ€ 2019๋…„ ๋‚ด ๋ฒ”์œ„์— ์žˆ๋Š” ์ปฌ๋ ‰์…˜์˜ ๋ฌธ์„œ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

{
"createdAt": {
"$gte": new Date("2019-01-01T00:00:00.000Z"),
"$lt": new Date("2020-01-01T00:00:00.000Z"),
}
}

๊ฐ ๋ฌธ์„œ์˜ ๋ฃจํŠธ ์ˆ˜์ค€ ํ•„๋“œ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปฌ๋ ‰์…˜์„ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MongoDB๊ฐ€ ๊ฐ ๋ฌธ์„œ์— ๋Œ€ํ•ด ํ‰๊ฐ€ํ•˜๋Š” ํŠน์ • ๊ฐ’์ด๋‚˜ ์ค‘์ฒฉ ํ‘œํ˜„์‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ MongoDB ์„œ๋ฒ„ ๋งค๋‰ด์–ผ์˜ ์ฟผ๋ฆฌ ๋ฌธ์„œ ํŠœํ† ๋ฆฌ์–ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

{ "<Field Name>": <Value | Expression> }

์˜ˆ์‹œ

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” name ํ•„๋“œ์˜ ๊ฐ’์ด Basketball์ธ ๋ฌธ์„œ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

{ "name": "Basketball" }

๋‹จ์ผ ์ฟผ๋ฆฌ ๋ฌธ์„œ์—์„œ ์—ฌ๋Ÿฌ ์ฟผ๋ฆฌ ์กฐ๊ฑด์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ๋ฌธ์„œ์˜ ๊ฐ ๋ฃจํŠธ ์ˆ˜์ค€ ํ•„๋“œ๋Š” ์ปฌ๋ ‰์…˜์˜ ํ•„๋“œ์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค. MongoDB๋Š” ๋ชจ๋“  ์ฟผ๋ฆฌ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๋ฌธ์„œ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ MongoDB ์„œ๋ฒ„ ๋งค๋‰ด์–ผ์˜ ๋‚ด์žฅ๋œ/์ค‘์ฒฉ๋œ ๋ฌธ์„œ์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ ํŠœํ† ๋ฆฌ์–ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

{
"<Field Name 1>": <Value | Expression>,
"<Field Name 2>": <Value | Expression>
}

์˜ˆ์‹œ

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” name ํ•„๋“œ์˜ ๊ฐ’์ด Basketball์ด๊ณ  quantity ๊ฐ’์ด 0๋ณด๋‹ค ํฐ ๋ฌธ์„œ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

{
"name": "Basketball",
"quantity": { "$gt": 0 }
}

๋‚ด์žฅ๋œ ๋ฌธ์„œ ํ•„๋“œ์˜ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปฌ๋ ‰์…˜ ์„ ์ฟผ๋ฆฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด์žฅ๋œ ๋ฌธ์„œ ํ•„๋“œ ๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ค‘์ฒฉ๋œ ์ฟผ๋ฆฌ ํ‘œํ˜„์‹ ๋˜๋Š” ํ‘œ์ค€ ๋ฌธ์„œ ์  ํ‘œ๊ธฐ๋ฒ• ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ MongoDB ์„œ๋ฒ„ ๋งค๋‰ด์–ผ์˜ ๋‚ด์žฅ๋œ/์ค‘์ฒฉ๋œ ๋ฌธ์„œ์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ ํŠœํ† ๋ฆฌ์–ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ค‘์ฒฉ๋œ ์ฟผ๋ฆฌ ํ‘œํ˜„์‹
{ "<Field Name>": { "<Nested Field Name>": <Value | Expression> } }
์  ํ‘œ๊ธฐ๋ฒ•
{ "<Field Name>.<Nested Field Name>": <Value | Expression> }

์˜ˆ์‹œ

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” reviews ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ๋ฆฌ๋ทฐ๋ฅผ ๋‚จ๊ธด ์‚ฌ๋žŒ์˜ ์‚ฌ์šฉ์ž ์ด๋ฆ„์ด JoeMango์ธ ๋ฌธ์„œ๋ฅผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค:

{
"reviews.0.username": "JoeMango"
}

๋ฐฐ์—ด ํ•„๋“œ์— ํฌํ•จ๋œ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ปฌ๋ ‰์…˜์„ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ • ๊ฐ’ ๋ฐฐ์—ด์— ๋Œ€ํ•œ ๋ฐฐ์—ด ํ•„๋“œ๋ฅผ ์ฟผ๋ฆฌํ•˜๋ฉด MongoDB๋Š” ๋ฐฐ์—ด ํ•„๋“œ๊ฐ€ ์ง€์ •๋œ ๊ฐ’ ๋ฐฐ์—ด ๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. MongoDB ๋ฐฐ์—ด ํ•„๋“œ์— ์ง€์ •๋œ ๊ฐ’ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ํฌํ•จ ๋œ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด $all ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

์ž์„ธํ•œ ๋‚ด์šฉ์€ MongoDB ์„œ๋ฒ„ ๋งค๋‰ด์–ผ์˜ ๋ฐฐ์—ด ์ฟผ๋ฆฌ ํŠœํ† ๋ฆฌ์–ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

{ "<Array Field Name>": [<Value>, ...] }

์˜ˆ์‹œ

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” reviews ๋ฐฐ์—ด์— ์ง€์ •๋œ ๋ฌธ์„œ์™€ ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์ •ํ™•ํžˆ ํ•˜๋‚˜์ธ ๋ฌธ์„œ๋ฅผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

{
"reviews": [{ username: "JoeMango", comment: "This rocks!" }]
}

์˜ˆ์‹œ

๋‹ค์Œ ์ฟผ๋ฆฌ ๋Š” reviews ๋ฐฐ์—ด ์— ์ง€์ •๋œ ๋ชจ๋“  ๋ฌธ์„œ์™€ ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จ๋œ ๋ฌธ์„œ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

{
"reviews": {
"$all": [{ username: "JoeMango", comment: "This rocks!" }]
}
}

๋ฐฐ์—ด ํ•„๋“œ์— ์žˆ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์š”์†Œ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปฌ๋ ‰์…˜์„ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ์กฐ๊ฑด์ด ์žˆ๋Š” ์ฟผ๋ฆฌ ํ‘œํ˜„์‹ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด ํ•„๋“œ ๋ฅผ ์ฟผ๋ฆฌ ํ•˜๋Š” ๊ฒฝ์šฐ MongoDB ๋Š” ๋ฐฐ์—ด ์š”์†Œ์˜ ๋ชจ๋“  ์กฐํ•ฉ ์ด ํ‘œํ˜„์‹ ์„ ์ถฉ์กฑํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. MongoDB ๊ฐ€ ๋‹จ์ผ ๋ฐฐ์—ด ์š”์†Œ๊ฐ€ ๋ชจ๋“  ํ‘œํ˜„์‹ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด $elemMatch ์—ฐ์‚ฐ์ž ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

์ž์„ธํ•œ ๋‚ด์šฉ์€ MongoDB ์„œ๋ฒ„ ๋งค๋‰ด์–ผ์˜ ๋ฐฐ์—ด ์ฟผ๋ฆฌ ํŠœํ† ๋ฆฌ์–ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

{ "<Array Field Name>": <Value | Expression> }

์˜ˆ์‹œ

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” reviews ๋ฐฐ์—ด ๋‚ด ์š”์†Œ์˜ ๋ชจ๋“  ์กฐํ•ฉ์ด ๋‚ด์žฅ๋œ ํ‘œํ˜„์‹์˜ ๋‘ ์กฐ๊ฑด์„ ๋ชจ๋‘ ์ถฉ์กฑํ•˜๋Š” ๋ฌธ์„œ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ง€์ •๋œ username ๋ฐ comment ๊ฐ’์ด ๋™์ผํ•œ ๋ฌธ์„œ์— ์žˆ์„ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

{
"reviews": {
"username": "JoeMango",
"comment": "This is a great product!"
}
}

์˜ˆ์‹œ

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” ๋‚ด์žฅ๋œ ํ‘œํ˜„์‹์˜ ๋‘ ์กฐ๊ฑด์ด ๋ชจ๋‘ reviews ๋ฐฐ์—ด์˜ ๋‹จ์ผ ์š”์†Œ๋กœ ์ถฉ์กฑ๋˜๋Š” ๋ฌธ์„œ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ง€์ •๋œ username ๋ฐ comment๋Š” ๋™์ผํ•œ ๋ฌธ์„œ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

{
"reviews": {
"$elemMatch": {
"username": "JoeMango",
"comment": "This is a great product!"
}
}
}

๋น„๊ต ์—ฐ์‚ฐ์ž ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์„œ ํ•„๋“œ์˜ ๊ฐ’์„ ๋‹ค๋ฅธ ๊ฐ’๊ณผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{ "<Field Name>": { "<Comparison Operator>": <Comparison Value> } }

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋น„๊ต ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

๋น„๊ต ์—ฐ์‚ฐ์ž
์„ค๋ช…

ํ•„๋“œ ๊ฐ’์ด ์ง€์ •๋œ ๊ฐ’๊ณผ ๊ฐ™์€ ๋ฌธ์„œ๋ฅผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•„๋“œ ๊ฐ’์ด ์ง€์ •๋œ ๊ฐ’๊ณผ ๊ฐ™์ง€ ์•Š์€ ๋ฌธ์„œ๋ฅผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•„๋“œ ๊ฐ’์ด ์ง€์ •๋œ ๊ฐ’๋ณด๋‹ค ํฐ ๋ฌธ์„œ๋ฅผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•„๋“œ ๊ฐ’์ด ์ง€์ •๋œ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ฌธ์„œ๋ฅผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•„๋“œ ๊ฐ’์ด ์ง€์ •๋œ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๋ฌธ์„œ๋ฅผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•„๋“œ ๊ฐ’์ด ์ง€์ •๋œ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ฌธ์„œ๋ฅผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•„๋“œ ๊ฐ’์ด ์ง€์ •๋œ ๊ฐ’ ๋ฐฐ์—ด์— ํฌํ•จ๋œ ๋ฌธ์„œ๋ฅผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•„๋“œ ๊ฐ’์ด ์ง€์ •๋œ ๊ฐ’ ๋ฐฐ์—ด์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๋ฌธ์„œ๋ฅผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” quantity๊ฐ€ 0๋ณด๋‹ค ํฌ๊ณ  10๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ฌธ์„œ๋ฅผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

{
"quantity": { "$gt": 0, "$lte": 10 }
}

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ํ•„๋“œ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ํ‘œํ˜„์‹์„ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
"<Field Name>": {
"<Logical Operator>": [<Expression>, ...]
}
}

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž
์„ค๋ช…

ํ•„๋“œ ๊ฐ’์ด ์ง€์ •๋œ ๋ชจ๋“  ํ‘œํ˜„์‹๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•„๋“œ ๊ฐ’์ด ์ง€์ •๋œ ํ‘œํ˜„์‹ ์ค‘ ํ•˜๋‚˜ ์ด์ƒ๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•„๋“œ ๊ฐ’์ด ์ง€์ •๋œ ํ‘œํ˜„์‹๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์„œ๋ฅผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ง€์ •๋œ ๋…ผ๋ฆฌ ํ‘œํ˜„์‹์˜ ๋ถ€์šธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜์ „์‹œํ‚ต๋‹ˆ๋‹ค.

์˜ˆ์‹œ

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” quantity๊ฐ€ 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ reviews ๋ฐฐ์—ด์— ๋ฌธ์„œ๊ฐ€ 5๊ฐœ ์ดํ•˜์ธ ๋ฌธ์„œ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

{
"$or": [
{ "quantity": { "$gt": 0 } },
{ "reviews": { "$size": { "$lte": 5 } } }
]
}

$regex ์ฟผ๋ฆฌ ์—ฐ์‚ฐ์ž ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๊ทœ ํ‘œํ˜„์‹ ์™€(๊ณผ) ์ผ์น˜ํ•˜๋Š” ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. . $regex EJSON ์œ ํ˜•์˜ ๋ชจํ˜ธ์„ฑ์„ ํ”ผํ•˜๋ ค๋ฉด BSON.BSONRegExp ๊ฐ์ฒด ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

{
"<Field Name>": {
"$regex": BSON.BSONRegExp(<RegEx String>, <RegEx Options>)
}
}

์˜ˆ์‹œ

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” name ๊ฐ’์— ํ•˜์œ„ ๋ฌธ์ž์—ด ball(๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์•ˆ ํ•จ)์ด ํฌํ•จ๋œ ๋ฌธ์„œ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

{
"name": { "$regex": BSON.BSONRegExp(".+ball", "i") }
}