У меня есть VisitModel, которая сохранила посещения разных пользователей в разных местах посетителей.
{
"_id" : ObjectId("5bb5d748b8c8a07fee6b4437"),
"__v" : NumberInt(0),
"ctopamount" : NumberInt(500),
"hrno" : NumberInt(200900410),
"lastUpdationTime" : ISODate("2018-10-04T09:03:04.619+0000"),
"mobileNo" : "9413394574",
"name" : "Hirdesh Sharma",
"simInventory" : NumberInt(10),
"ssa" : "cojp",
"visitedRetailer" : "7597000662",
"visitLocation" : {
"lat" : "26.9140156",
"lng" : "75.7997062"
}
}
// ----------------------------------------------
{
"_id" : ObjectId("5bb5ea682b955e0961e55b24"),
"__v" : NumberInt(0),
"ctopamount" : NumberInt(10),
"hrno" : NumberInt(200900410),
"lastUpdationTime" : ISODate("2018-10-04T10:24:40.180+0000"),
"mobileNo" : "9413394574",
"name" : "Hirdesh Sharma",
"simInventory" : NumberInt(10),
"ssa" : "cojp",
"visitedRetailer" : "7597000662",
"visitLocation" : {
"lat" : "26.9140203",
"lng" : "75.7997103"
}
}
// ----------------------------------------------
{
"_id" : ObjectId("5bb71766edeebb1682902c5a"),
"__v" : NumberInt(0),
"ctopamount" : NumberInt(0),
"hrno" : NumberInt(200900410),
"lastUpdationTime" : ISODate("2018-10-05T07:48:54.566+0000"),
"mobileNo" : "9413394574",
"name" : "Hirdesh Sharma",
"simInventory" : NumberInt(0),
"ssa" : "cojp",
"visitedRetailer" : "123456789",
"visitLocation" : {
"lat" : "26.913970499999998",
"lng" : "75.799515"
}
}
// ----------------------------------------------
{
"_id" : ObjectId("5bb71991edeebb1682902c5b"),
"__v" : NumberInt(0),
"ctopamount" : NumberInt(0),
"hrno" : NumberInt(200900410),
"lastUpdationTime" : ISODate("2018-10-05T07:58:09.241+0000"),
"mobileNo" : "9413394574",
"name" : "Hirdesh Sharma",
"simInventory" : NumberInt(0),
"ssa" : "cojp",
"visitedRetailer" : "1234567890",
"visitLocation" : {
"lat" : "26.9140163",
"lng" : "75.7997024"
}
}
// ----------------------------------------------
{
"_id" : ObjectId("5bb72c28edeebb1682902c5d"),
"__v" : NumberInt(0),
"ctopamount" : NumberInt(10000),
"hrno" : NumberInt(200901869),
"lastUpdationTime" : ISODate("2018-10-05T09:17:28.825+0000"),
"mobileNo" : "9413395846",
"name" : "Dharmendra Soni",
"simInventory" : NumberInt(15),
"ssa" : "Circle Office",
"visitedRetailer" : "0000000000",
"visitLocation" : {
"lat" : "26.8922714",
"lng" : "75.8042042"
}
}
// ----------------------------------------------
{
"_id" : ObjectId("5bb72e50edeebb1682902c5e"),
"__v" : NumberInt(0),
"ctopamount" : NumberInt(5000),
"hrno" : NumberInt(200901869),
"lastUpdationTime" : ISODate("2018-10-05T09:26:40.371+0000"),
"mobileNo" : "9413395846",
"name" : "Dharmendra Soni",
"simInventory" : NumberInt(10),
"ssa" : "Circle Office",
"visitedRetailer" : "9414002070",
"visitLocation" : {
"lat" : "26.8922503",
"lng" : "75.8041773"
}
}
// ----------------------------------------------
{
"_id" : ObjectId("5bb72f49edeebb1682902c5f"),
"__v" : NumberInt(0),
"ctopamount" : 1.5,
"hrno" : NumberInt(200901869),
"lastUpdationTime" : ISODate("2018-10-05T09:30:49.843+0000"),
"mobileNo" : "9413395846",
"name" : "Dharmendra Soni",
"simInventory" : null,
"ssa" : "Circle Office",
"visitedRetailer" : "7597000559",
"visitLocation" : {
"lat" : "26.8922608",
"lng" : "75.8041638"
}
}
// ----------------------------------------------
{
"_id" : ObjectId("5bb759e7edeebb1682902c63"),
"__v" : NumberInt(0),
"ctopamount" : NumberInt(0),
"hrno" : NumberInt(198911286),
"lastUpdationTime" : ISODate("2018-10-05T12:32:39.394+0000"),
"mobileNo" : "9413395614",
"name" : "Shankara lal meena",
"simInventory" : NumberInt(0),
"ssa" : "Chittorgarh",
"visitedRetailer" : "7597000559",
"visitLocation" : {
"lat" : "24.038592",
"lng" : "74.7767928"
}
}
}
У меня есть другая модель с сохраненной базой данных RetailerLocation, в которой сохранено имя продавца, адрес, номер продавца и местоположение.
{
"_id" : ObjectId("5c864a80498ceb2d94a8a029"),
"Name of Retailer" : "Karan Singh",
"SSA" : "JAIPUR",
"savedLocation" : {
"lat" : 26.8122376,
"lng" : 75.7783984
},
"Retailernumber" : "7597000559"
}
// ----------------------------------------------
{
"_id" : ObjectId("5c864a80498ceb2d94a8a02a"),
"Name of Retailer" : "HANUMAN PRASAD",
"SSA" : "JAIPUR",
"savedLocation" : {
"lat" : 26.9142872,
"lng" : 75.7431824
},
"Retailernumber" : "7597000632"
}
// ----------------------------------------------
{
"_id" : ObjectId("5c864a80498ceb2d94a8a02b"),
"Name of Retailer" : "Karan Singh",
"SSA" : "JAIPUR",
"savedLocation" : {
"lat" : 26.9039945,
"lng" : 75.8325143
},
"Retailernumber" : "7597000633"
}
// ----------------------------------------------
{
"_id" : ObjectId("5c864a80498ceb2d94a8a02c"),
"Name of Retailer" : "kunal hemani",
"SSA" : "JAIPUR",
"savedLocation" : {
"lat" : 26.931319,
"lng" : 75.8201112
},
"Retailernumber" : "7597000638"
}
// ----------------------------------------------
{
"_id" : ObjectId("5c864a80498ceb2d94a8a02d"),
"Name of Retailer" : "kumawat floor mill",
"SSA" : "JAIPUR",
"savedLocation" : {
"lat" : 26.8592253,
"lng" : 75.7851659
},
"Retailernumber": "7597000662"
}
// ----------------------------------------------
{
"_id" : ObjectId("5c864a80498ceb2d94a8a02e"),
"Name of Retailer" : "care point",
"SSA" : "JAIPUR",
"savedLocation" : {
"lat" : 26.9247296,
"lng" : 75.7894896
},
"Retailernumber" : "7597000708"
}
// ----------------------------------------------
{
"_id" : ObjectId("5c864a80498ceb2d94a8a02f"),
"Name of Retailer" : "SAYED MOBILE",
"SSA" : "JAIPUR",
"savedLocation" : {
"lat" : 26.933338,
"lng" : 75.8074372
},
"Retailernumber" : "7597000718"
}
// ----------------------------------------------
{
"_id" : ObjectId("5c864a80498ceb2d94a8a030"),
"Name of Retailer" : "jaipur moters",
"SSA" : "JAIPUR",
"savedLocation" : {
"lat" : 26.9187819,
"lng" : 75.8102266
},
"Retailernumber" : "7597000773"
}
// ----------------------------------------------
{
"_id" : ObjectId("5c864a80498ceb2d94a8a031"),
"Name of Retailer" : "sona telecom",
"SSA" : "JAIPUR",
"savedLocation" : {
"lat" : 26.9212756,
"lng" : 75.8085795
},
"Retailernumber" : "7597000776"
}
// ----------------------------------------------
{
"_id" : ObjectId("5c864a80498ceb2d94a8a032"),
"Name of Retailer" : "sangam mobile",
"SSA" : "JAIPUR",
"savedLocation" : {
"lat" : 26.9194859,
"lng" : 75.8078163
},
"Retailernumber" : "7597000785"
}
// ----------------------------------------------
{
"_id" : ObjectId("5c864a80498ceb2d94a8a033"),
"Name of Retailer" : "bombay collection",
"SSA" : "JAIPUR",
"savedLocation" : {
"lat" : 26.8564543,
"lng" : 75.8207683
},
"Retailernumber": "7597000792"
}
теперь я хочу отображать данные следующим образом
{
"ctopamount" : NumberInt(500),
"hrno" : NumberInt(200900410),
"mobileNo" : "9413394574",
"name" : "Hirdesh Sharma",
"simInventory" : NumberInt(10),
"ssa" : "cojp",
"visitedRetailer" : "7597000662",
"visitLocation" : {
"lat" : "26.9140156",
"lng" : "75.7997062"
}
"savedLocation" : {
"lat" : "26.9140156",
"lng" : "75.7997062"
}
}
где сохраненное местоположение должно быть получено из коллекции RetailerLocation на основе visitedRetailer=RetailerMobile





В вашей модели посещения вместо сохранения местоположения посещения вы можете напрямую сохранить идентификатор объекта розничных продавцов из местоположения розничного продавца. Затем вы можете просто использовать заполнение данных. Вот ссылка на заполнение в Мангуста
Надеюсь, это поможет.
Попробуйте с этим.
Напишите агрегатную функцию в visitModel и найдите RetailerLocation.
Тест1 -> модель посещения Test2 ->Расположение продавца
db.getCollection('Test1').aggregate([
{
$lookup:{
from:"Test2",
localField:"visitedRetailer",
foreignField:"Retailernumber",
as:"retailerDetails"
}
},
{
$unwind:{
path:"$retailerDetails",
preserveNullAndEmptyArrays:true
}
},
{
$project:{
"ctopamount" :1,
"hrno" : 1,
"mobileNo" : 1,
"name" : 1,
"simInventory" :1,
"ssa" : 1,
"visitedRetailer" : 1,
"visitLocation" : 1,
"savedLocation" : "$retailerDetails.savedLocation"
}
}
])
Спасибо, Мадхав, это сработало, но можем ли мы использовать то же самое в node.js, используя mongoose
Прости, брат. Я не знаком с мангустом.
У меня нет доступа к комментариям, но что касается ответа @Ashwanth Madhav, вы можете сделать то же самое в мангусте.
Test1.aggregate([{
$lookup:{
from:"Test2",
localField:"visitedRetailer",
foreignField:"Retailernumber",
as:"retailerDetails"
}
},
{
$unwind:{
path:"$retailerDetails",
preserveNullAndEmptyArrays:true
}
},
{
$project:{
"ctopamount" :1,
"hrno" : 1,
"mobileNo" : 1,
"name" : 1,
"simInventory" :1,
"ssa" : 1,
"visitedRetailer" : 1,
"visitLocation" : 1,
"savedLocation" : "$retailerDetails.savedLocation"
}}
]).exec(function (err,fetcheddata) {
if ( _.isNull(err) && fetcheddata.length > 0 ){
var response = genRes.generateResponse(true,"found successfully");
callback(response,fetcheddata);
}
else if ( fetcheddata==undefined || transactions.length == 0 ){
var response = genRes.generateResponse(false,"No Data found");
callback(response,null);
}
else{
var response = genRes.generateResponse(false,"there occurred some error : "+err);
callback(response,null)
}
})
};
Теперь я не могу изменить дизайн документа. Любое решение с существующей коллекцией, пожалуйста. Еще одна вещь в модели посещения: сохраняемое местоположение извлекается из мобильного GPS, в то время как местоположение формы розничного продавца является эталонным местоположением. Так что я могу сравнить расстояние в этих двух местоположениях. Спасибо за ваш быстрый ответ