मान लीजिए मैं निम्नलिखित प्रश्न हैं:मोंगोस अगर स्थिति के साथ एक प्रश्न कैसे लिखें?
post.getSpecificDateRangeJobs = function(queryData, callback) {
var matchCriteria = queryData.matchCriteria;
var currentDate = new Date();
var match = { expireDate: { $gte: new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate()) } };
if (queryData.matchCriteria !== "") {
match = {
expireDate: { $gte: new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate()) },
$text: { $search: matchCriteria }
};
}
var pipeline = [
{
$match: match
},
{
$group: {
_id: null,
thirtyHourAgo: {
$sum: {
$cond: [
{
$gte: [
"$publishDate",
new Date(queryData.dateGroups.thirtyHourAgo)
]
},
1,
0
]
}
},
fourtyEightHourAgo: {
$sum: {
$cond: [
{
$gte: [
"$publishDate",
new Date(queryData.dateGroups.fourtyHourAgo)
]
},
1,
0
]
}
},
thirtyDaysAgo: {
$sum: {
$cond: [
{
$lte: [
"$publishDate",
new Date(queryData.dateGroups.oneMonthAgo)
]
},
1,
0
]
}
}
}
}
];
var postsCollection = post.getDataSource().connector.collection(
post.modelName
);
postsCollection.aggregate(pipeline, function(err, groupByRecords) {
if (err) {
return callback("err");
}
return callback(null, groupByRecords);
});
};
क्या मैं करना चाहता हूँ है: 1- जांच अगर queryData.dateGroups.thirtyHourAgo
ही अस्तित्व में है और मूल्य नहीं है, तो केवल क्वेरी में प्रासंगिक मैच खंड (पदों की संख्या केवल अतीत के लिए जोड़ने 30 घंटे)। 2- जांचें कि queryData.dateGroups.fourtyHourAgo
मौजूद है, तो प्रासंगिक क्वेरी अनुभाग जोड़ें (पिछले 30 घंटों के लिए पदों की गिनती, और पिछले 48 घंटे पहले)। 3 और queryData.dateGroups.oneMonthAgo
के लिए वही (पिछले 30 घंटे, 48 घंटे, और पिछले एक महीने के लिए पदों की गणना)।
मुझे माइस्क्ल की तरह कुछ चाहिए यदि यह जांचने की स्थिति है कि एक चर मौजूद है या नहीं खाली है तो एक क्वेरी क्लॉज शामिल करें। क्या यह करना मुमकिन है?
मेरे नमूना डेटा की तरह है:
/* 1 */
{
"_id" : ObjectId("58d8bcf01caf4ebddb842855"),
"vacancyNumber" : "123213",
"position" : "dsfdasf",
"number" : 3,
"isPublished" : true,
"publishDate" : ISODate("2017-03-11T00:00:00.000Z"),
"expireDate" : ISODate("2017-05-10T00:00:00.000Z"),
"keywords" : [
"dasfdsaf",
"afdas",
"fdasf",
"dafd"
],
"deleted" : false
}
/* 2 */
{
"_id" : ObjectId("58e87ed516b51f33ded59eb3"),
"vacancyNumber" : "213123",
"position" : "Software Developer",
"number" : 4,
"isPublished" : true,
"publishDate" : ISODate("2017-04-14T00:00:00.000Z"),
"expireDate" : ISODate("2017-05-09T00:00:00.000Z"),
"keywords" : [
"adfsadf",
"dasfdsaf"
],
"deleted" : false
}
/* 3 */
{
"_id" : ObjectId("58eb5b01c21fbad780bc74b6"),
"vacancyNumber" : "2432432",
"position" : "Web Designer",
"number" : 4,
"isPublished" : true,
"publishDate" : ISODate("2017-04-09T00:00:00.000Z"),
"expireDate" : ISODate("2017-05-12T00:00:00.000Z"),
"keywords" : [
"adsaf",
"das",
"fdafdas",
"fdas"
],
"deleted" : false
}
/* 4 */
{
"_id" : ObjectId("590f04fbf97a5803636ec66b"),
"vacancyNumber" : "4354",
"position" : "Software Developer",
"number" : 5,
"isPublished" : true,
"publishDate" : ISODate("2017-05-19T00:00:00.000Z"),
"expireDate" : ISODate("2017-05-27T00:00:00.000Z"),
"keywords" : [
"PHP",
"MySql"
],
"deleted" : false
}
मान लीजिए मैं अपने आवेदन इंटरफ़ेस में तीन लिंक है: 1- 30 घंटे पहले पोस्ट नहीं। 2- 48 घंटे पूर्व पोस्ट। 3- पिछले एक महीने की पोस्ट।
अब यदि उपयोगकर्ता पहले लिंक पर क्लिक करता है तो मुझे केवल 30 घंटे पहले समूह पदों पर नियंत्रण करना चाहिए, लेकिन यदि उपयोगकर्ता दूसरे लिंक पर क्लिक करता है, तो मुझे 30 घंटे के लिए और 48 घंटे के लिए समूह पदों पर अपनी क्वेरी तैयार करनी चाहिए, और यदि उपयोगकर्ता तीसरे लिंक पर क्लिक करें मुझे उन सभी के लिए तैयार करना चाहिए।
var pipeline = [
{
$match: match
},
{
$group: {
_id: null,
if (myVariable) {
thirtyHourAgo: {
........
........
}
}
if (mysecondVariable) {
fortyEightHourAgo: {
........
........
}
}
की तरह कुछ आप नमूने के साथ परीक्षण करने के लिए और डेटा है कि नमूना से अपेक्षित आउटपुट पोस्ट कर सकते हैं होगा? आम तौर पर समेकन ढांचे का उपयोग करने से संबंधित समस्याओं के समाधान अपेक्षित आउटपुट से अनुमानित होते हैं, इसलिए यदि आप आईओ (इनपुट -> आउटपुट) डेटा प्रदान कर सकते हैं तो यह आपको हल करने में मदद करने के साथ एक लंबा रास्ता तय करेगा। – chridam
@ चिड़ियाम मैंने अपना प्रश्न अपडेट किया है, आशा है कि यह पर्याप्त स्पष्ट है। – jones