sql >> データベース >  >> NoSQL >> MongoDB

関係収集のためにMongoDBで削除を制限する方法

    これは、 $nin を使用して実行できます。

    3つのレコードを持つCompaniesコレクションを作成しましょう

    db.companies.find();
    
    {"_id":1, "name":"ABC Pvt Ltd", "Address":"Chennai, India"}
    {"_id":2, "name":"XYZ Pvt Ltd", "Address":"Mumbai, India"}
    {"_id":3, "name":"LMN Pvt Ltd", "Address":"Delhi, India"}
    

    従業員コレクションに3つのrecordscompany属性を持つemployeesコレクションを作成して、会社コレクションのドキュメントIDを参照し、会社1と2の従業員をテストします。

    db.employees.find();
    
    {"_id":1, "firstname":"X", "lastname":"Y", "company":1}
    {"_id":2, "firstname":"A", "lastname":"B", "company":1}
    {"_id":2, "firstname":"Z", "lastname":"A", "company":2}
    

    従業員のいない会社を削除する前に、まず従業員のいる会社を見つける必要があります。複数のエントリを回避するには、distinct を使用します。

    db.employees.distinct("company")
    [ 1, 2 ]
    

    現在、従業員がいる別の会社で$ ninを使用して、従業員がいない会社を削除しています

    db.companies.remove({"_id":{$nin : db.employees.distinct("company")}});
    

    ここで、companysコレクションに対してfindクエリを実行すると、2つのレコードのみが取得されます。

    db.companies.find();
    { "_id" : 1, "name" : "ABC Pvt Ltd", "Address" : "Chennai, India" }
    { "_id" : 2, "name" : "XYZ Pvt Ltd", "Address" : "Mumbai, India" }
    

    会社3には従業員がいないため、削除されました

    お役に立てば幸いです!




    1. ネストされた配列にforeignFieldがある場合の$lookup

    2. mongodbクエリを動的に構築する方法

    3. 複数のドキュメントがmongodbデータベースに追加されないようにする方法

    4. Redis Pub / Sub ServiceStack、スレッドをキャンセルします