MongoDB में सरणी फील्ड से केवल पहला तत्व प्राप्त करने के लिए प्रोजेक्शन में $slice ऑपरेटर का उपयोग 1 के साथ करें।
उदाहरण
नेस्टेड सरणी वाला दस्तावेज़ बनाएं:
> db.gettingFirstItemInArrayDemo.insertOne(
{
"UserId": 101,
"UserName": "Carol",
"UserOtherDetails": [
{"UserFriendName": "Sam"},
{"UserFriendName": "Mike"},
{"UserFriendName": "David"},
{"UserFriendName": "Bob"}
]
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5cdfca52bf3115999ed51205") }
दस्तावेज़ देखें:
> db.gettingFirstItemInArrayDemo.find().pretty();
{ "_id" : ObjectId("5cdfca52bf3115999ed51205"), "UserId" : 101, "UserName" : "Carol", "UserOtherDetails" : [ { "UserFriendName" : "Sam" }, { "UserFriendName" : "Mike" }, { "UserFriendName" : "David" }, { "UserFriendName" : "Bob" } ] }
सरणी का केवल पहला तत्व प्राप्त करें
> db.gettingFirstItemInArrayDemo.find({"UserId": 101}, {UserOtherDetails: {$slice: 1}});
आउटपुट:
{ "_id" : ObjectId("5cdfca52bf3115999ed51205"), "UserId" : 101, "UserName" : "Carol", "UserOtherDetails" : [ { "UserFriendName" : "Sam" } ] }
व्याख्या:
{$slice: 1}- सरणी के पहले 1 तत्व लौटाता है- पूरा दस्तावेज़ लौटता है, लेकिन UserOtherDetails सरणी केवल 1 तत्व तक सीमित
- अन्य फील्ड (UserId, UserName) अपरिवर्तित रहते हैं
एग्रीगेशन विकल्प (अधिक नियंत्रण)
db.collection.aggregate([
{$match: {UserId: 101}},
{$project: {
UserId: 1,
UserName: 1,
FirstFriend: {$arrayElemAt: ["$UserOtherDetails.UserFriendName", 0]}
}}
])
यह केवल विशिष्ट फील्ड (UserFriendName) का पहला मान निकालता है, पूरा ऑब्जेक्ट नहीं।
$slice त्वरित संदर्भ
| मान | परिणाम |
|---|---|
1 | पहला तत्व |
-1 | अंतिम तत्व |
[skip, limit] | skip के बाद limit तत्व |