MongoDB の NOT IN 比較演算子
-
MongoDB の
$nin
(NOT IN
)比較演算子 -
$nin
演算子をfind()
メソッドとともに使用して、MongoDB のフィールドをクエリする -
$nin
演算子をfind()
メソッドとともに使用して、MongoDB の埋め込みドキュメントをクエリする -
MongoDB で
$nin
演算子をfind()
メソッドとともに使用して配列をクエリする -
$nin
演算子をfind()
メソッドとともに使用して、MongoDB のドキュメントの配列をクエリする -
$nin
比較演算子をupdate()
メソッドとともに使用して、MongoDB のフィールド値を更新する -
MongoDB の正規式で
$nin
演算子を使用する
比較演算子は、大規模なデータセットを操作するときに非常に役立ちます。データから洞察を得るのに役立ちます。
このチュートリアルでは、MongoDB で $nin
(NOT IN
)比較演算子を使用する方法について説明します。
また、MongoDB の find()
および update()
メソッドで $nin
を使用する方法も示します。さらに、$nin
演算子を使用した正規式の使用法についても学習します。
MongoDB の $nin
(NOT IN
)比較演算子
$nin
は、MongoDB の比較演算子の 1つです。この演算子は、フィールド値が指定された配列に属していないか、フィールドが存在しないドキュメントを選択します。
フィールドが配列、ドキュメントの配列、または埋め込まれたドキュメントの配列を保持している場合、フィールドが配列を保持し、指定された配列の値に等しいアイテムがないドキュメントのみを取得します(このシナリオも後で表示されます)このチュートリアルでは)。
詳細を掘り下げる前に、いくつかのドキュメントを含むサンプルコレクションを作成しましょう。
サンプルコード:
db.createCollection('students');
db.students.insertMany([
{
"name": {first: "Mehvish", last: "Ashiq"},
"age": 30,
"gender": "Female",
"discipline": "BSCS",
"joining_year": 2014,
"department": "Computer Science",
"courses":[ "Python","Java", "Machine Learning", "Data Science"],
"contact":[
{ phone: { type: "cell", number: "923042516485" }},
{ mail: { type: "official", email: "mehvishofficial@gmail.com"}}
]
},
{
"name": {first: "Aftab", last: "Raza"},
"age": 25,
"gender": "Male",
"discipline": "BSIT",
"joining_year": 2012,
"department": "Information Technology",
"courses":[ "Python","JavaScript", "Information Security"],
"contact":[
{ phone: { type: "landline", number: "111-444-5555" }},
{ mail: { type: "personal", email: "aftab@hotmail.com"}}
]
}
])
db.students.find().pretty()
出力:
{
"_id" : ObjectId("6298ef54271c5124b739d7d3"),
"name" : {
"first" : "Mehvish",
"last" : "Ashiq"
},
"age" : 30,
"gender" : "Female",
"discipline" : "BSCS",
"joining_year" : 2014,
"department" : "Computer Science",
"courses" : [
"Python",
"Java",
"Machine Learning",
"Data Science"
],
"contact" : [
{
"phone" : {
"type" : "cell",
"number" : "923042516485"
}
},
{
"mail" : {
"type" : "official",
"email" : "mehvishofficial@gmail.com"
}
}
]
}
{
"_id" : ObjectId("6298ef54271c5124b739d7d4"),
"name" : {
"first" : "Aftab",
"last" : "Raza"
},
"age" : 25,
"gender" : "Male",
"discipline" : "BSIT",
"joining_year" : 2012,
"department" : "Information Technology",
"courses" : [
"Python",
"JavaScript",
"Information Security"
],
"contact" : [
{
"phone" : {
"type" : "landline",
"number" : "111-444-5555"
}
},
{
"mail" : {
"type" : "personal",
"email" : "aftab@hotmail.com"
}
}
]
}
少し複雑なドキュメントを作成する唯一の理由は、さまざまなフィールドでの $nin
比較演算子の使用法を学ぶことです。たとえば、単一のフィールド、埋め込みドキュメントを含むフィールド、配列を含むフィールド、および埋め込みドキュメントの配列。
$nin
演算子を find()
メソッドとともに使用して、MongoDB のフィールドをクエリする
サンプルコード:
db.students.find({ "joining_year": { $nin: [2011,2014] }}).pretty();
出力:
{
"_id" : ObjectId("6298ef54271c5124b739d7d4"),
"name" : {
"first" : "Aftab",
"last" : "Raza"
},
"age" : 25,
"gender" : "Male",
"discipline" : "BSIT",
"joining_year" : 2012,
"department" : "Information Technology",
"courses" : [
"Python",
"JavaScript",
"Information Security"
],
"contact" : [
{
"phone" : {
"type" : "landline",
"number" : "111-444-5555"
}
},
{
"mail" : {
"type" : "personal",
"email" : "aftab@hotmail.com"
}
}
]
}
この例では、$nin
演算子を find()
メソッドとともに使用して、joining_year
が 2011
でも 2014
でもないドキュメント全体を検索します。
ドキュメント全体ではなく特定のフィールドのみを表示する場合は、次のようにコマンドを使用できます。1
を書き込むと、フィールドとその値がコンピューター画面に出力されます。0
は、このフィールドが結果セットに含まれないことを意味します。
サンプルコード:
db.students.find(
{ "joining_year": { $nin: [2011,2014] }},
{"name": 1, "discipline": 1, "department": 1, "_id":0}
).pretty();
出力:
{
"name" : {
"first" : "Aftab",
"last" : "Raza"
},
"discipline" : "BSIT",
"department" : "Information Technology"
}
$nin
演算子を find()
メソッドとともに使用して、MongoDB の埋め込みドキュメントをクエリする
サンプルコード:
db.students.find(
{ "name.last": { $nin: ["Raza", "Ali"] }},
{ "name": 1, "gender": 1, "age": 1, "_id":0}
).pretty();
出力:
{
"name" : {
"first" : "Mehvish",
"last" : "Ashiq"
},
"age" : 30,
"gender" : "Female"
}
サンプルドキュメントには、このチュートリアルの name
という名前のフィールドがあり、さらに 2つのフィールド(first
と last
)を持つ埋め込みドキュメントが含まれています。 $nin
比較演算子を name
フィールドで使用するには、ドット表記 name.first
を使用します。
このコードスニペットでは、name.last
の値が $nin
に指定された配列のメンバーではないドキュメントの name
、age
、および gender
を取得しようとしています。オペレーター。
name.last
が Raza
でも Ali
でもないドキュメントから指定されたフィールドを取得します。 $nin
演算子で AND
条件を使用することもできます。
サンプルコード:
db.students.find(
{ "name.last": { $nin: ["Raza", "Ali"]}, "name.first": {$nin: ["Mehvish"]}},
{ "name": 1, "gender": 1, "age": 1, "_id":0}
).pretty();
今回は、最初のドキュメントの name.first
の値として Mehvish
があり、2 番目のドキュメントの name.last
フィールドの値として Raza
が含まれている 2つのドキュメントがあるため、出力は得られません。したがって、両方のドキュメントが結果セットから除外され、何も得られませんでした。
MongoDB で $nin
演算子を find()
メソッドとともに使用して配列をクエリする
サンプルコード:
db.students.find(
{ "courses": { $nin: ["JavaScript", "Networking", "Psychology"] }},
{ "courses": 1, "department": 1, "_id":0}
).pretty();
出力:
{
"department" : "Computer Science",
"courses" : [
"Python",
"Java",
"Machine Learning",
"Data Science"
]
}
この出力を注意深く理解してください。この出力では、course
フィールドは、$nin
演算子の指定された配列の値に等しい要素を持たない配列を保持します。
JavaScript
、Networking
、または Psychology
に等しい要素を持つ配列を含むフィールドが結果セットから除外されるドキュメント全体。
$nin
演算子を find()
メソッドとともに使用して、MongoDB のドキュメントの配列をクエリする
このチュートリアルの冒頭で学生
コレクションにデータを入力するときに使用した連絡先
フィールドを注意深く観察してください。これには、各ドキュメントに埋め込まれた(ネストされた)ドキュメントが含まれるドキュメントの配列が含まれています。
$nin
演算子を使用してそれを照会するにはどうすればよいですか?以下の例を参照してください。
db.students.find(
{ "contact.phone.type": { $nin: ["cell"] }},
{ "contact": 1, "department": 1, "_id":0}
).pretty();
出力:
{
"department" : "Information Technology",
"contact" : [
{
"phone" : {
"type" : "landline",
"number" : "111-444-5555"
}
},
{
"mail" : {
"type" : "personal",
"email" : "aftab@hotmail.com"
}
}
]
}
$nin
比較演算子を update()
メソッドとともに使用して、MongoDB のフィールド値を更新する
サンプルコード:
db.students.update(
{ "joining_year": {$nin: [2011,2014]}},
{ $set: {"joining_year": 2000}}
);
このコードスニペットでは、joining_year
が 2014
でも 2011
でもないドキュメントを取得し、joining_year
の値を 2000
に設定します。次に、次のコマンドを使用して、更新されたドキュメントを表示します。
db.students.find().pretty()
MongoDB の正規式で $nin
演算子を使用する
サンプルコード:
var array_of_regex = [/Data+/];
db.students.find(
{ "courses": {$nin: array_of_regex}},
{"name":1, "courses":1, "department":1, "_id":0}
).pretty();
出力:
{
"name" : {
"first" : "Aftab",
"last" : "Raza"
},
"department" : "Information Technology",
"courses" : [
"Python",
"JavaScript",
"Information Security"
]
}
この例では、さまざまな正規表現を含むことができる配列を作成します。今のところ、正規式は 1つだけです。
なぜ regexes の配列を作成する必要があるのですか?これは、$nin
が比較対象の配列を使用するためです。