Я пытаюсь получить запись в соответствии с некоторым значением фильтра, используя MongoDB и GoLang, но возвращающие нулевые данные. Я объясняю свою запись json ниже.
{
"OrderNumber" : "EQORD/20/10001060",
"OrderStatus" : "Pending",
"OrderType" : "Online",
"Comments" : "",
"DispatchPriority" : "High",
"Customer" : {
"CustomerID" : "5e4e2ee2a060bd3d31af431b",
"CustomerFirstName" : "Chehan",
"CustomerLastName" : "Kumar",
"CustomerMobile" : "9886688726",
"CustomerAlternateMobile" : "",
"CustomerEmail" : "way2chethan@live.com",
"CustomerType" : "Parent",
"Children" : [
{
"StudentAdmissionID" : "10021920086",
"StudnetFirstName" : "M Sri Ranga Gayathri",
"StudentLastName" : "",
"StudentGrade" : "PU-2/12",
"StudentGender" : "female",
"Language" : "SANSKRIT"
}
],
"IsShippingAddressSameAsBillingAddress" : false,
"StoreCode" : "DKFL",
"StoreDescription" : "Deeksha DCFL Store is a place where Parents can purchase all the school merchandise in one place at reasonable prices.",
"StoreBranch" : "",
"StoreType" : "Online",
"StoreName" : "Deeksha, Yelahanka, Bengaluru",
"StoreCustomerId" : ""
},
"Products" : [
{
"ID" : 1,
"StoreCode" : "DKFL",
"StoreName" : "Deeksha, Yelahanka, Bengaluru",
"StoreDescription" : "Deeksha DCFL Store is a place where Parents can purchase all the school merchandise in one place at reasonable prices.",
"StoreBranch" : "Talaghattapura",
"AddressLine1" : "31/1, Talaghattapura",
"AddressLine2" : "Kanakapura Road",
"Street" : "Vajramuneeswara Temple Road",
"Landmark" : "",
"Latitude" : "undefined",
"Longitude" : "undefined",
"City" : "Bengaluru",
"State" : "Karnataka",
"Country" : "India",
"Pincode" : "560062",
"StoreType" : "Online",
"WarehouseCode" : "",
"Description" : "",
"ProductName" : "Boys White & Blue Striped Half Shirt",
"ProductCode" : "05T9YNCON",
"ProductType" : "C",
"Brand" : "SA",
"VendorCode" : "",
"SKU" : "DKFLMSHTSAM38",
"BASESKU" : "DKFL05T9YNCON",
"CategoryId" : "",
"CategoryName" : "Uniform/Formal/Shirts/Male",
"AttributeSet" : "1000000",
"Gender" : "M",
"BaseUnitPrice" : 452.38,
"TaxPercentage" : 5.0,
"HSNCode" : 6021,
"BaseUnitOfMeasure" : "",
"Weight" : 0.0,
"TaxAmount" : 22.6200008392334,
"MRP" : 475.0,
"Weightage" : "",
"DiscountPrice" : 475.0,
"TotalOrderQuantity" : 4,
"TotalProductPrice" : 1900.0,
"TotalProductDiscountPrice" : 1900.0,
"MinimumPrice" : 0.0,
"CurrencyCode" : "INR",
"MinimumBuyQty" : 1,
"MaximumBuyQty" : 6,
"TotalBaseUnitofMeasure" : "",
"TotalWeight" : "",
"Variants" : [
{
"Name" : "Sizes",
"Value" : [
"38"
],
"Code" : [
"24",
"26",
"28",
"30",
"32",
"34",
"36",
"38",
"40",
"42",
"44",
"46",
"48"
],
"UnitofMeasure" : ""
},
{
"Name" : "Colours",
"Value" : [
"WHITE"
],
"Code" : [
"M"
],
"UnitofMeasure" : ""
},
{
"Name" : "Grades",
"Value" : [
"PU-1/11"
],
"Code" : [
"U",
"V"
],
"UnitofMeasure" : ""
}
]
}
],
"IsActive" : false,
"FocusSync" : false
}
Это мой формат mongoDB json. Я объясняю свой код ниже.
func SalesOrderSearch(SalesOrder *models.OrderFilterData) map[string]interface{} {
logger.Log.Println("OrderRepository SalesOrderSearch Function Begin")
session, error := driver.Connect()
db := session.DB(config.Configuration.Database)
var resp map[string]interface{}
Status := SalesOrder.Status
AdmissionID := SalesOrder.AdmissionID
Grade := SalesOrder.Grade
ProductName := SalesOrder.ProductName
Category := SalesOrder.Category
Branch := SalesOrder.Branch
Vendor := SalesOrder.Vendor
fmt.Println(AdmissionID,Grade,ProductName,Branch,Category,Vendor)
resourceManager := resources.ResourceManager{}
if error != nil {
resp := utils.Message(resourceManager.GetProperty(constants.ERROR), resourceManager.GetProperty(constants.DB_SERVER_NOT_REACHABLE_CODE), resourceManager.GetProperty(constants.DB_SERVER_NOT_REACHABLE_DESC))
return resp
} else {
var result []interface{}
filter := []bson.M{
bson.M{"$match": bson.M{"OrderStatus": Status, "Customer": bson.M{"$elemMatch":bson.M{"Children":bson.M{"$elemMatch":bson.M{"StudentAdmissionID":AdmissionID}}}},"Products":bson.M{"$elemMatch":bson.M{"ProductName":ProductName,"CategoryName":Category }}}},
bson.M{ "$skip" : 0 },
bson.M{ "$limit" : 5 },
}
err := db.C(ORDERCOLLECTION).Pipe(filter).All(&result)
fmt.Println(err);
if err != nil {
resp = utils.Message(resourceManager.GetProperty(constants.ERROR), resourceManager.GetProperty(constants.CUSTOMER_SEARCH_NOTFOUND_CODE), resourceManager.GetProperty(constants.CUSTOMER_SEARCH_NOTFOUND_DESC))
} else {
resp = utils.Message(resourceManager.GetProperty(constants.SUCCESS), resourceManager.GetProperty(constants.CUSTOMER_SEARCH_FOUND_CODE), resourceManager.GetProperty(constants.CUSTOMER_SEARCH_FOUND_DESC))
resp["data"] = result
}
}
defer session.Close()
return resp
}
Здесь мне нужно найти запись в соответствии с заданным условием фильтра, а также это должно быть условие или означает, что если все значение есть, тогда оно будет соответствовать записи как для всего значения или, если есть некоторые значения, он также будет соответствовать записи соответственно. Но в моем случае это вообще не получение записи. Может ли кто-нибудь помочь мне решить эту проблему.