MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB - Заявка за колекция

MongoDB предоставя db.collection.find() метод за запитване на документи в колекция.

db.collection.find() избира документи в колекция и връща курсор към избраните документи.

Връщане на всички документи

Този пример връща всички документи от музикантите колекция:

db.musicians.find()

Резултат:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
{ "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }

Връща всички документи, защото не сме предали никакви параметри като критерии за филтриране.

Горната заявка е съкратена версия на db.musicians.find( {} ) . В горната заявка пропуснахме фигурните скоби {} . Това е напълно валидно при работа с MongoDB.

Добавяне на критерии за филтриране

Можете да филтрирате резултатите, като предоставите само критериите, които ви интересуват.

Например, ако се интересуваме само от Deep Purple от изпълнителите колекция:

db.artists.find({ artistname : "Deep Purple" })

Резултат:

{ "_id" : ObjectId("5781f85d48ef8c6b3ffb0150"), "artistname" : "Deep Purple", "albums" : [ { "album" : "Machine Head", "year" : 1972, "genre" : "Rock" }, { "album" : "Stormbringer", "year" : 1974, "genre" : "Rock" } ] }

Форматирайте резултатите

Може да откриете, че горните резултати са малко трудни за четене. Документът се връща като един дълъг текст.

Можете да използвате pretty() метод за форматиране на резултатите, така че да са малко по-лесни за четене.

Просто добавете pretty() до края, така:

db.artists.find({ artistname : "Deep Purple" }).pretty()

Резултат:

{
	"_id" : ObjectId("5781f85d48ef8c6b3ffb0150"),
	"artistname" : "Deep Purple",
	"albums" : [
		{
			"album" : "Machine Head",
			"year" : 1972,
			"genre" : "Rock"
		},
		{
			"album" : "Stormbringer",
			"year" : 1974,
			"genre" : "Rock"
		}
	]
}

Още опции за филтриране

Ето още няколко начина за филтриране на резултатите.

Посочете AND Условия

Можете да посочите, че трябва да се връщат само документи, съдържащи две или повече посочени стойности.

В този пример уточняваме, че само музиканти, които свирят на барабани и където родените преди 1950 г. трябва да бъдат върнати. Ще бъдат върнати само документи, които отговарят на двата критерия.

db.musicians.find( { instrument: "Drums", born: { $lt: 1950 } } )

Резултат:

{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }

Посочете OR Условия

Можете също да посочите, че едната или другата стойност трябва да е вярна. Докато едно от условията е вярно, документът ще бъде върнат.

В този пример искаме документи, които съдържат музиканти, които свирят на барабани или са родени преди 1950 г.

db.musicians.find(
   {
     $or: [ { instrument: "Drums" }, { born: { $lt: 1950 } } ]
   }
)

Резултат:

{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
{ "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }

$in Оператор

$in операторът ви позволява да предоставите списък със стойности. Ако даден документ съдържа някоя от тези стойности, той ще бъде върнат.

Използвайки следния пример, търсим всички музиканти, които или са с вокали, или свирят на китара.

db.musicians.find( { instrument: { $in: [ "Vocals", "Guitar" ] } } )

Резултат

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }

Запитване за масив от документи

Този пример прави заявки за масив от документи. Той намира албуми, издадени след 2000 г.

db.artists.find(
   {
      albums: {
                $elemMatch: {
                     year: { $gt: 2000 }
                }
      }
   }
).pretty()

Резултат:

{
	"_id" : ObjectId("578217c248ef8c6b3ffb015a"),
	"artistname" : "Robben Ford",
	"albums" : [
		{
			"album" : "Bringing it Back Home",
			"year" : 2013,
			"genre" : "Blues"
		},
		{
			"album" : "Talk to Your Daughter",
			"year" : 1988,
			"genre" : "Blues"
		}
	]
}
{
	"_id" : ObjectId("578217c248ef8c6b3ffb015b"),
	"artistname" : "Snoop Dogg",
	"albums" : [
		{
			"album" : "Tha Doggfather",
			"year" : 1996,
			"genre" : "Rap"
		},
		{
			"album" : "Reincarnated",
			"year" : 2013,
			"genre" : "Reggae"
		}
	]
}

Ще забележите, че тези резултати съдържат и албуми от по-рано от 2000 г. Това е правилно — това е начинът, по който работят документно-ориентираните бази данни. Всяка заявка ще върне целия документ (но само онези документи, които отговарят на посочените критерии).

db.collection.findOne() Метод

Можете да използвате db.collection.findOne() метод за връщане на един документ, който отговаря на посочените критерии за заявка.

Ако няколко документа удовлетворяват критериите, се връща само първият, както е определено от естествения ред на документите на диска.

Така че търсете цяла колекция като тази:

db.musicians.findOne( )

Ще върне само един документ:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }

Ако променим findOne() към find() така:

db.musicians.find( )

Виждаме, че всъщност има 8 документа в колекцията:

{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
{ "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 }
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Динамични атрибути с Rails и Mongoid

  2. Разгръщане и поддръжка на MongoDB с помощта на Ansible

  3. По-бърза ли е рамката на Mongodb Aggregation от map/reduce?

  4. DeprecationWarning:Слушането на събития в класа Db е отхвърлено и ще бъде премахнато в следващата основна версия

  5. Урокът за основите на MongoDB