nodeJS mongoose how to make a special get crud - node.js

That's my mongodb data base shown in cmd as you see there is a field named test which exist a time and one other time didn't exist I want to write a get method to find field which contain only imei without test
router.get('/', (req, res, next) => {
Post.find()
.then((posts) => {
res.json(posts);
console.log(posts);
console.log("ok" + JSON.stringify(req.body) + req.body.imei);
})
.catch(err => console.log(err))
});
Here the get method it show me all data base I want to customize it.
{
"_id" : ObjectId("5eb6b927e1c2916320ab28de"),
"imei" : {
"name" : "50"
},
"test" : {
"batterieState" : "0"
},
"__v" : 0
}
{
"_id" : ObjectId("5eb6bbbc09183a3e4c833ebe"),
"imei" : {
"name" : "xx"
},
"__v" : 0
}
{
"_id" : ObjectId("5eb6bbcb09183a3e4c833ebf"),
"imei" : {
"name" : ""
},
"__v" : 0
}
{
"_id" : ObjectId("5eb6bc7809183a3e4c833ec0"),
"imei" : {
"name" : "865566048694354"
},
"__v" : 0
}
{
"_id" : ObjectId("5eb6bcc309183a3e4c833ec1"),
"imei" : {
"name" : "865566048694354"
},
"__v" : 0
}
{
"_id" : ObjectId("5eb6bd1209183a3e4c833ec2"),
"imei" : {
"name" : "865566048694354"
},
"__v" : 0
}
{
"_id" : ObjectId("5eb6bdc609183a3e4c833ec3"),
"imei" : {
"name" : "865566048694354"
},
"__v" : 0
}
{
"_id" : ObjectId("5eb6be4609183a3e4c833ec4"),
"imei" : {
"name" : "xx"
},
"test" : {
"tactileState" : "0",
"pixelState" : "0",
"greyState" : "0"
},
"__v" : 0
}
{
"_id" : ObjectId("5eb6be6609183a3e4c833ec5"),
"imei" : {
"name" : "865566048694354"
},
"__v" : 0
}
{
"_id" : ObjectId("5eb6beef09183a3e4c833ec6"),
"imei" : {
"name" : "xx"
},
"test" : {
"tactileState" : "0",
"pixelState" : "0",
"greyState" : "0"
},
"__v" : 0
}
{
"_id" : ObjectId("5eb6bf8709183a3e4c833ec7"),
"imei" : {
"name" : "865566048694354"
},
"test" : {
"tactileState" : "ignore",
"pixelState" : "ignore",
"greyState" : "ignore"
},
"__v" : 0
}
I want some help for this to write this method correctly to get only fields with imei only and without test.

Use this query
Post.find({
imei: {
$exists: true
},
test: {
$exists: false
}
})
Docs of $exists operator

Related

NodeJS how to make a special get CRUD

I'm writing some nodeJS code in which I want to make a get request and the result of this get must respect two condition the first is that the imei.name is passed in parameeteres req.query.imei and the second condition is that the test filed is not empty that's my MongoDb database.
{
"_id" : ObjectId("5eb7f90fb88d8d4d94184333"),
"imei" : {
"name" : "bokhhjbr",
"modele" : "5486"
},
"__v" : 0
}
{
"_id" : ObjectId("5eb7fb9cb88d8d4d94184334"),
"imei" : {
"name" : "865566048694354",
"modele" : "CPH1803"
},
"__v" : 0
}
{
"_id" : ObjectId("5eba73395fd8dd073065efdf"),
"imei" : {
"name" : "bok55555555555hjbr",
"modele" : "5486"
},
"createdAt" : ISODate("2020-05-12T09:58:17.203Z"),
"updatedAt" : ISODate("2020-05-12T09:58:17.203Z"),
"__v" : 0
}
{
"_id" : ObjectId("5ed0f93c0c93ec1c785358ab"),
"imei" : {
"name" : "865566048694354"
},
"test" : {
"tactileState" : "1",
"pixelState" : "1",
"greyState" : "1"
},
"createdAt" : ISODate("2020-05-29T11:59:56.441Z"),
"updatedAt" : ISODate("2020-05-29T11:59:56.441Z"),
"__v" : 0
}
{
"_id" : ObjectId("5ed0f9420c93ec1c785358ac"),
"imei" : {
"name" : "865566048694354"
},
"test" : {
"tactileState" : "1",
"pixelState" : "1",
"greyState" : "1"
},
"createdAt" : ISODate("2020-05-29T12:00:02.040Z"),
"updatedAt" : ISODate("2020-05-29T12:00:02.040Z"),
"__v" : 0
}
I tried to write this method but without any result
router.get('/gettdata/', (req, res, next) => {
let aa=req.query.imei;
console.log(aa);
Post.findOne(
imei:{"imei.name":req.query.imei},
test: {$exists:true})
.then((posts) => {
res.json(posts);
console.log(posts);
})
.catch(err => console.log(err))
});

How to get total record by object id in nodejs

I want to get all category name and total record with respect to category object id.
I am new in Node JS and want to create api for listing and total record with respective object id.
My json for Categgory is -
/* 1 createdAt:8/21/2019, 3:00:35 PM*/
{
"_id" : ObjectId("5d5d0f3b3dff690eac4872ee"),
"isForHomePage" : false,
"isactive" : false,
"name" : "Welcome",
"description" : "Solutions for Your Business",
"catImage" : "http://localhost:3000/static/media/software-service.1ec2246b.jpg",
"createdTime" : 1566379835,
"__v" : 0
},
/* 2 createdAt:8/19/2019, 12:17:45 PM*/
{
"_id" : ObjectId("5d5a4611eb5bc029d4463406"),
"isForHomePage" : true,
"isactive" : false,
"name" : "Test",
"description" : "Solutions for Your Business",
"catImage" : "http://localhost:3000/static/media/software-service.1ec2246b.jpg",
"createdTime" : 1566197265,
"__v" : 0
},
/* 3 createdAt:8/19/2019, 12:10:01 PM*/
{
"_id" : ObjectId("5d5a44417d10952b50ff13a0"),
"isForHomePage" : true,
"isactive" : true,
"name" : "Software Services",
"description" : "Solutions for Your Business",
"catImage" : "http://localhost:3000/static/media/software-service.1ec2246b.jpg",
"createdTime" : 1566196801,
"__v" : 0
},
/* 4 createdAt:8/19/2019, 12:07:51 PM*/
{
"_id" : ObjectId("5d5a43bf7d10952b50ff139f"),
"isForHomePage" : true,
"isactive" : true,
"name" : "Analytics",
"description" : "Solutions for Your Business",
"catImage" : "http://localhost:3000/static/media/analytics.cf89d7fe.jpg",
"createdTime" : 1566196671,
"__v" : 0
}
and JSON for jobs is -
/* 1 createdAt:8/22/2019, 12:48:08 PM*/
{
"_id" : ObjectId("5d5e41b0807a2504e15dcc01"),
"status" : 8001,
"duration" : 10,
"isactive" : true,
"userWhoCreated" : ObjectId("5d5d40276ab29a4daef653ae"),
"companyNane" : "Sanganan It Solutions Pvt. Ltd.",
"contactPerson" : "Gaurav Sinha",
"jobTitle" : "iOS Developer",
"category" : ObjectId("5d5a4611eb5bc029d4463406"),
"description" : "iOS Developer lead requirement",
"descriptionLink" : "www.abc.com",
"createdTime" : 1566458288,
"__v" : 0
},
/* 2 createdAt:8/22/2019, 12:17:31 PM*/
{
"_id" : ObjectId("5d5e3a83979672041fee4d0a"),
"status" : 8002,
"duration" : 10,
"isactive" : true,
"userWhoCreated" : ObjectId("5d5d40276ab29a4daef653ae"),
"companyNane" : "Sanganan It Solutions Pvt. Ltd.",
"contactPerson" : "Gaurav Sinha",
"jobTitle" : "iOS Developer",
"category" : ObjectId("5d5a4611eb5bc029d4463406"),
"description" : "iOS Developer lead requirement",
"descriptionLink" : "www.abc.com",
"createdTime" : 1566456451,
"__v" : 0
}
We have category json and category object id is present in jobs json. Like Test category from Category JSON has two jobs in JOB JSON.
I have tried this solution -
router.get("/getAllCategory", function (req, res) {
categoryObj.find({ 'isactive': true }, function (err, CategoryList) {
if (err) {
var message = { "Success": 0, "Message": "Some error found" };
res.send(message)
}
else {
var message = { "Success": 1, "Category": CategoryList };
res.send(message)
}
})
});
but it is giving me list of categories not count.
my expected output json must be like this -
[
{
'categoryname': 'Analytics',
'totalJobsOfThisCategory':'0'
},
{
'categoryname': 'Software Services',
'totalJobsOfThisCategory':'0'
},
{
'categoryname': 'Test',
'totalJobsOfThisCategory':'2'
},
]
Use aggregate function of mongodb
db.jobs.aggregate([
{ $group: { _id: "$category", total: { $sum: 1 } } }
])
Use populate
const x= await X.find()
.populate('userWhoCreated', 'field1 field2')
.populate('category', 'field1 field2');
res.json({
x,
});

How to match inside $lookup used of MongoDB aggregation?

This is the query I've been using for getting some random uniqueXperiences, in that I've lookup xpert and I want to project its _id and name.
db.getCollection('uniquexperiences').aggregate([{
'$sample': {
'size': 2
}
}, {
'$lookup': {
'from': 'users',
'as': 'Xpert',
'pipeline':[{
'$project': {
'name': 1
}
}]
}
}]);
The output I'm getting is something like this:
/* 1 */
{
"_id" : ObjectId("5b558b5997199d3ec4953e6b"),
"updatedBy" : ObjectId("5b433dbf6a93e56a21f610eb"),
"updatedAt" : ISODate("2018-10-10T10:56:36.952Z"),
"createdBy" : ObjectId("5b433dbf6a93e56a21f610eb"),
"createdAt" : ISODate("2018-07-23T08:01:29.125Z"),
"title" : "Horse riding at EIRS",
"organisationFlag" : false,
"xperienceSubCategory" : [
ObjectId("5b4de8199f07bf0b303b8c5f")
],
"xpert" : [
ObjectId("5b51b054054a962cc6f914db")
],
"description" : "Beautiful rugged landscape makes Ladakh stand apart in the country. There is indeed so much that needs to be explored here and little did we know that amongst the best ways to explore this place is riding a horse. In the remote places like Zanskar Valley, where paved roads are rare and motor biking is not every ones cup of tea, horses make an incredible means of travel. One can access to Zangla, Penzela Pass, Panikhar Fort and Zongkhul, Stongdey and Gelugpa monasteries on a horseback.",
"__v" : 4,
"images" : [
{
"public_id" : "dotttg3xm0vvqygr4n1w",
"version" : 1537776979,
"signature" : "4fb562aa4115941e78f773dd11ed6be37a337acd",
"width" : 1280,
"height" : 640,
"format" : "jpg",
"resource_type" : "image",
"url" : "http://res.cloudinary.com/xplr-qa/image/upload/v1537776979/dotttg3xm0vvqygr4n1w.jpg",
"secure_url" : "https://res.cloudinary.com/xplr-qa/image/upload/v1537776979/dotttg3xm0vvqygr4n1w.jpg",
"_id" : ObjectId("5ba89d55ac69b4784a4f3a1f")
},
{
"public_id" : "cfdepst0r2wz39rowvzd",
"version" : 1537776980,
"signature" : "e770b7354c01ffce61c2e3cb83c79456dacc5438",
"width" : 2100,
"height" : 1526,
"format" : "jpg",
"resource_type" : "image",
"url" : "http://res.cloudinary.com/xplr-qa/image/upload/v1537776980/cfdepst0r2wz39rowvzd.jpg",
"secure_url" : "https://res.cloudinary.com/xplr-qa/image/upload/v1537776980/cfdepst0r2wz39rowvzd.jpg",
"_id" : ObjectId("5ba89d55ac69b4784a4f3a1e")
},
{
"public_id" : "lqfk6twitfefrjq1h2jq",
"version" : 1537776979,
"signature" : "ad1e0079a9419bde0047228446be17218117cf2e",
"width" : 2500,
"height" : 1666,
"format" : "jpg",
"resource_type" : "image",
"url" : "http://res.cloudinary.com/xplr-qa/image/upload/v1537776979/lqfk6twitfefrjq1h2jq.jpg",
"secure_url" : "https://res.cloudinary.com/xplr-qa/image/upload/v1537776979/lqfk6twitfefrjq1h2jq.jpg",
"_id" : ObjectId("5ba89d55ac69b4784a4f3a1d")
}
],
"source" : "",
"price" : 400,
"meetingLocation" : [],
"coordinates" : [
72.955162,
19.172098
],
"purchaseCount" : 10,
"Xpert" : [
{
"_id" : ObjectId("5b518101752982066a0dcc08"),
"name" : {
"last" : "Bourdain",
"first" : "Anthony"
}
},
{
"_id" : ObjectId("5b51b054054a962cc6f914db"),
"name" : {
"last" : "Yane",
"first" : "Sid"
}
},
{
"_id" : ObjectId("5b51c00597199d3ec4953e68"),
"name" : {
"last" : "ipsum",
"first" : "Lorem"
}
},
{
"_id" : ObjectId("5b59a8cdca722c3177cf3e63"),
"name" : {
"last" : "Lorem",
"first" : "Test"
}
},
{
"_id" : ObjectId("5b5eea6e2d4b6a04b2d9d599")
},
{
"_id" : ObjectId("5b5f02e22d4b6a04b2d9d5f1")
},
{
"_id" : ObjectId("5b60364f9e866d6453fef3ea"),
"name" : {
"last" : "Lorem",
"first" : "ipsum"
}
},
{
"_id" : ObjectId("5b6d70f96aaf19087ac6d9e9"),
"name" : {
"first" : "Indrajit",
"last" : "Jadhav"
}
},
{
"_id" : ObjectId("5b6d81953da5c50974642974"),
"name" : {
"last" : "Lorem",
"first" : "shin"
}
},
{
"_id" : ObjectId("5b6d831f3da5c50974642975"),
"name" : {
"last" : "Lorem",
"first" : "Shin "
}
},
{
"_id" : ObjectId("5b6d83b83da5c50974642976"),
"name" : {
"last" : "wert",
"first" : "fadsg"
}
},
{
"_id" : ObjectId("5b6d83ee3da5c50974642977"),
"name" : {
"last" : "asdfsaf",
"first" : "sadf"
}
},
{
"_id" : ObjectId("5b7ba46cd0e5fa137805552b"),
"name" : {
"first" : "Vivek",
"last" : "Pandey"
}
},
{
"_id" : ObjectId("5b7bb359d0e5fa13780555a9"),
"name" : {
"first" : "theamalageeks",
"last" : "null"
}
},
{
"_id" : ObjectId("5b7bd19ed0e5fa137805565d"),
"name" : {
"first" : "Anikesh",
"last" : "Baburanjan"
}
},
{
"_id" : ObjectId("5b7fa359211f5649518ae311"),
"name" : {
"first" : "Akhsay",
"last" : "Gaikwad"
}
},
{
"_id" : ObjectId("5b80181fab8747537011be5c"),
"name" : {
"first" : "Sagar",
"last" : "Bisen"
}
},
{
"_id" : ObjectId("5b83f1c5de663c0dcccfb483"),
"name" : {
"first" : "INDRAJIT",
"last" : "JADHAV"
}
},
{
"_id" : ObjectId("5b92154efc790f18121f9e02"),
"name" : {
"first" : "sagar",
"last" : "bisen"
}
},
{
"_id" : ObjectId("5ba39c509350135c9951ecb6"),
"name" : {
"first" : "Anikesh",
"last" : "Baburajan"
}
},
{
"_id" : ObjectId("5ba3b8e79350135c9951ecb7"),
"name" : {
"first" : "Anurag",
"last" : "Banerjee"
}
},
{
"_id" : ObjectId("5ba3c14e9350135c9951ecb8"),
"name" : {
"first" : "Dave",
"last" : "Jhala"
}
},
{
"_id" : ObjectId("5ba4dfcf6bb5277e1d7db2af"),
"name" : {
"first" : "Mark",
"last" : "Henry"
}
},
{
"_id" : ObjectId("5ba4e1c0452d7e01ce3dd34e"),
"name" : {
"first" : "Ankita",
"last" : "Mestry"
}
},
{
"_id" : ObjectId("5ba7795b452d7e01ce3dd34f"),
"name" : {
"first" : "Abhishek",
"last" : "Gupta"
}
},
{
"_id" : ObjectId("5ba9ec5844996a4be81a0c12"),
"name" : {
"first" : "Neeti",
"last" : "Patil"
}
},
{
"_id" : ObjectId("5baa1abf44996a4be81a0c13"),
"name" : {
"first" : "Krishna",
"last" : "S"
}
},
{
"_id" : ObjectId("5bb481d4c77dd914de2cb2f7"),
"name" : {
"first" : "krishna",
"last" : "shetty"
}
}
]
}
/* 2 */
{
"_id" : ObjectId("5bab23c897f85d07b9235a19"),
"updatedBy" : ObjectId("5b433dbf6a93e56a21f610eb"),
"updatedAt" : ISODate("2018-10-10T10:57:01.790Z"),
"createdBy" : ObjectId("5b433dbf6a93e56a21f610eb"),
"createdAt" : ISODate("2018-09-26T06:14:32.637Z"),
"xpert" : ObjectId("5ba4dfcf6bb5277e1d7db2af"),
"title" : "Mumbai Temples Tour",
"images" : [
{
"public_id" : "uvmemwfwmjfl7pmv4upk",
"version" : 1537943055,
"signature" : "5358320e4f396a2ee980e767a16d4a92228c95d6",
"width" : 1440,
"height" : 900,
"format" : "jpg",
"resource_type" : "image",
"url" : "http://res.cloudinary.com/xplr-qa/image/upload/v1537943055/uvmemwfwmjfl7pmv4upk.jpg",
"secure_url" : "https://res.cloudinary.com/xplr-qa/image/upload/v1537943055/uvmemwfwmjfl7pmv4upk.jpg",
"_id" : ObjectId("5bab260f97f85d07b9235a20")
},
{
"public_id" : "zztqwdbl7ejccxmougad",
"version" : 1537943055,
"signature" : "bcb413431d518b243d801f92ff9cf0a8f9bd7682",
"width" : 1920,
"height" : 1080,
"format" : "jpg",
"resource_type" : "image",
"url" : "http://res.cloudinary.com/xplr-qa/image/upload/v1537943055/zztqwdbl7ejccxmougad.jpg",
"secure_url" : "https://res.cloudinary.com/xplr-qa/image/upload/v1537943055/zztqwdbl7ejccxmougad.jpg",
"_id" : ObjectId("5bab260f97f85d07b9235a1f")
}
],
"organisationFlag" : false,
"xperienceSubCategory" : [
ObjectId("5b616b4c9e866d6453fef3eb")
],
"description" : "Global Vipassana Pagoda is an expression of our gratitude towards the Buddha who strived for incalculable aeons to reach Supreme Enlightenment.",
"__v" : 4,
"price" : 800,
"source" : "",
"meetingLocation" : [],
"coordinates" : [
72.955162,
19.172098
],
"primaryLocation" : ObjectId("5bacb0192e0b2751f0f7f057"),
"purchaseCount" : 20,
"Xpert" : [
{
"_id" : ObjectId("5b518101752982066a0dcc08"),
"name" : {
"last" : "Bourdain",
"first" : "Anthony"
}
},
{
"_id" : ObjectId("5b51b054054a962cc6f914db"),
"name" : {
"last" : "Yane",
"first" : "Sid"
}
},
{
"_id" : ObjectId("5b51c00597199d3ec4953e68"),
"name" : {
"last" : "ipsum",
"first" : "Lorem"
}
},
{
"_id" : ObjectId("5b59a8cdca722c3177cf3e63"),
"name" : {
"last" : "Lorem",
"first" : "Test"
}
},
{
"_id" : ObjectId("5b5eea6e2d4b6a04b2d9d599")
},
{
"_id" : ObjectId("5b5f02e22d4b6a04b2d9d5f1")
},
{
"_id" : ObjectId("5b60364f9e866d6453fef3ea"),
"name" : {
"last" : "Lorem",
"first" : "ipsum"
}
},
{
"_id" : ObjectId("5b6d70f96aaf19087ac6d9e9"),
"name" : {
"first" : "Indrajit",
"last" : "Jadhav"
}
},
{
"_id" : ObjectId("5b6d81953da5c50974642974"),
"name" : {
"last" : "Lorem",
"first" : "shin"
}
},
{
"_id" : ObjectId("5b6d831f3da5c50974642975"),
"name" : {
"last" : "Lorem",
"first" : "Shin "
}
},
{
"_id" : ObjectId("5b6d83b83da5c50974642976"),
"name" : {
"last" : "wert",
"first" : "fadsg"
}
},
{
"_id" : ObjectId("5b6d83ee3da5c50974642977"),
"name" : {
"last" : "asdfsaf",
"first" : "sadf"
}
},
{
"_id" : ObjectId("5b7ba46cd0e5fa137805552b"),
"name" : {
"first" : "Vivek",
"last" : "Pandey"
}
},
{
"_id" : ObjectId("5b7bb359d0e5fa13780555a9"),
"name" : {
"first" : "theamalageeks",
"last" : "null"
}
},
{
"_id" : ObjectId("5b7bd19ed0e5fa137805565d"),
"name" : {
"first" : "Anikesh",
"last" : "Baburanjan"
}
},
{
"_id" : ObjectId("5b7fa359211f5649518ae311"),
"name" : {
"first" : "Akhsay",
"last" : "Gaikwad"
}
},
{
"_id" : ObjectId("5b80181fab8747537011be5c"),
"name" : {
"first" : "Sagar",
"last" : "Bisen"
}
},
{
"_id" : ObjectId("5b83f1c5de663c0dcccfb483"),
"name" : {
"first" : "INDRAJIT",
"last" : "JADHAV"
}
},
{
"_id" : ObjectId("5b92154efc790f18121f9e02"),
"name" : {
"first" : "sagar",
"last" : "bisen"
}
},
{
"_id" : ObjectId("5ba39c509350135c9951ecb6"),
"name" : {
"first" : "Anikesh",
"last" : "Baburajan"
}
},
{
"_id" : ObjectId("5ba3b8e79350135c9951ecb7"),
"name" : {
"first" : "Anurag",
"last" : "Banerjee"
}
},
{
"_id" : ObjectId("5ba3c14e9350135c9951ecb8"),
"name" : {
"first" : "Dave",
"last" : "Jhala"
}
},
{
"_id" : ObjectId("5ba4dfcf6bb5277e1d7db2af"),
"name" : {
"first" : "Mark",
"last" : "Henry"
}
},
{
"_id" : ObjectId("5ba4e1c0452d7e01ce3dd34e"),
"name" : {
"first" : "Ankita",
"last" : "Mestry"
}
},
{
"_id" : ObjectId("5ba7795b452d7e01ce3dd34f"),
"name" : {
"first" : "Abhishek",
"last" : "Gupta"
}
},
{
"_id" : ObjectId("5ba9ec5844996a4be81a0c12"),
"name" : {
"first" : "Neeti",
"last" : "Patil"
}
},
{
"_id" : ObjectId("5baa1abf44996a4be81a0c13"),
"name" : {
"first" : "Krishna",
"last" : "S"
}
},
{
"_id" : ObjectId("5bb481d4c77dd914de2cb2f7"),
"name" : {
"first" : "krishna",
"last" : "shetty"
}
}
]
}
Instead of getting multiple Xperts in Xpert
Now I want to match the Xpert fields _id with xpert field of the output
Use the below aggregation.
Use $lookup pipeline variant. Let expression checks for a array type for xpert and converts into array when it is not. $match to collect all the matching users documents. $project to output name from user document.
db.uniquexperiences.aggregate([
{"$sample":{"size":2}},
{"$lookup":{
"from":"users",
"let":{"xpert":{"$cond":[{"$isArray":"$xpert"},"$xpert",["$xpert"]]}},
"pipeline":[
{"$match":{"$expr":{"$in":["$_id","$$xpert"]}}},
{"$project":{"name":1}}],
"as":"Xpert"
}}
])

Mongo pull object from array inside array

i have inside my mongoDB collection this document
{
"_id" : ObjectId("5b633025579fac22e74bf3be"),
"FLAGS" : [
{
"toSent" : [
{
"_id" : ObjectId("5b633025579fac22e74bf3c2"),
"phone" : "+84404040404"
},
{
"_id" : ObjectId("5b633025579fac22e74bf3c1"),
"phone" : "+212652253403"
},
{
"_id" : ObjectId("5b633025579fac22e74bf3c0"),
"phone" : "+212123456788"
}
],
"_id" : ObjectId("5b633025579fac22e74bf3bf"),
"action" : "group_p_a"
},
{
"toSent" : [
{
"_id" : ObjectId("5b633031579fac22e74bf3c9"),
"phone" : "+212651077199"
},
{
"_id" : ObjectId("5b633031579fac22e74bf3c8"),
"phone" : "+84404040404"
},
{
"_id" : ObjectId("5b633031579fac22e74bf3c7"),
"phone" : "+212652253403"
},
{
"_id" : ObjectId("5b633031579fac22e74bf3c6"),
"phone" : "+212123456788"
}
],
"_id" : ObjectId("5b633031579fac22e74bf3c5"),
"action" : "group_p_a"
}
],
"time" : ISODate("2018-08-02T16:24:05.747+0000"),
"action_user_phone" : "+212123456788",
"idGroup" : "e534379a-1580-4568-b5ec-6eaf981538d2",
"nomGroup" : "MOH FOR EVER",
"__v" : NumberInt(0)
}
TODO
I need to remove for example this element { "_id" : ObjectId("5b633025579fac22e74bf3c2"), "phone" : "+84404040404"}
WHAT I DID
GroupEvents.update({}, {$pull:{FLAGS:{$elemMatch:{toSent:{phone: "+84404040404"} }}}},function(err,ret){
if(err)
console.log("error"+err);
if(ret)
console.log(ret);
});
It remove all what's inside toSent event if it doesn't match.
Any help please
You need to use $ positional operator instead of $elemMatch here
GroupEvents.update(
{ "Flags.toSent.phone": "+84404040404" },
{ "$pull": { "FLAGS.$.toSent": { "phone": "+84404040404" }}},
)
If you want remove from every element of FLAGS array this you need to use $[] the all positional operator
GroupEvents.update(
{ "Flags.toSent.phone": "+84404040404" },
{ "$pull": { "FLAGS.$[].toSent": { "phone": "+84404040404" }}},
)

How to fetch specific fields in Mongo DB only values without keys?

My data set is following:
{ "_id" : "EVNQUERY-k9Uoo74Q3WcdmU", "event_data" : "{\"data\":\"helo\"}", "event_name" : "onOemPushAlert", "timestamp_start" : 1452678481433, "timestamp_end" : 1452678481433, "sender" : "USR-ADMIN", "status" : "pending", "query" : { "user" : { "and" : [ { "email" : { "eq" : "" } } ] } }, "updated_on" : ISODate("2016-01-13T09:48:01.459Z"), "created_on" : ISODate("2016-01-13T09:48:01.459Z") }
{ "_id" : "EVNQUERY-yAKmrbzs2JeaUY", "event_data" : "{\"data\":\"ji\"}", "event_name" : "onOemPushAlert", "timestamp_start" : 1452681060159, "timestamp_end" : 1452681060159, "sender" : "USR-ADMIN", "status" : "pending", "query" : { "user" : { "###and###" : [ { "email" : { "eq" : "" } } ] } }, "updated_on" : ISODate("2016-01-13T10:31:00.223Z"), "created_on" : ISODate("2016-01-13T10:31:00.223Z") }
{ "_id" : "EVNQUERY-0NeCstt2eJchDZ", "event_data" : "{\"data\":\"hyg\"}", "event_name" : "onOemPushAlert", "timestamp_start" : 1452681073882, "timestamp_end" : 1452681073882, "sender" : "USR-ADMIN", "status" : "pending", "query" : { "user" : { "###and###" : [ { "email" : { "eq" : "" } } ] } }, "updated_on" : ISODate("2016-01-13T10:31:13.897Z"), "created_on" : ISODate("2016-01-13T10:31:13.897Z") }
and i am running following query
db.eventqueries.find({},{_id:1})
but it give me
{ "_id" : "EVNQUERY-k9Uoo74Q3WcdmU" }
{ "_id" : "EVNQUERY-yAKmrbzs2JeaUY" }
{ "_id" : "EVNQUERY-0NeCstt2eJchDZ" }
but what i want is
["EVNQUERY-k9Uoo74Q3WcdmU", "EVNQUERY-yAKmrbzs2JeaUY", "EVNQUERY-0NeCstt2eJchDZ"]
Perform a distinct() query against the _id field on the collection:
db.eventqueries.distinct("_id")
In the node.js driver run the distinct() command which would have a callback with the results:
collection.distinct("_id", function(err, docs) {
if (err) { /* handle error */ };
console.log(docs);
});
You can use aggregation to achieve what you want. You can try this out
db.eventqueries.aggregate([
{
$group : {
keys : { $push : "_id" }
}
}
])

Resources