私はアプリケーションを作成しており、MongoDBコレクション内のドキュメント内の配列から要素を削除する関数を持っています。配列の要素数をカウントする
削除操作の直後に配列が空になるとすぐに、配列のフィールドの設定を解除する方法が必要です。空ではない配列を持つドキュメントと空の配列を持つドキュメントを区別できるように、これを行う必要があります。
例えば、今の私のsection
コレクションは次のようになります。
db.section.find({})
{ "_id" : ObjectId("57a0a38ad1c6ef24376477c5"), "sectionid" : "BTE4B",
"sectionname" : "BTech 4B", "year" : 4,
"session" : 2016, "courseid" : "BTE-CS", "password" : "pm8xTE0-",
"students" : 35, "addedon" : "2016-08-02 19:13:38", "teachers" : [ ] }
{ "_id" : ObjectId("57a0a96bd1c6ef24376477cd"), "sectionid" : "BTE4D",
"sectionname" : "BTech 4D", "year" : 4, "session" : 2016, "courseid" :
"BTE-CS", "password" : "sHhKr0Ov", "students" : 41, "addedon" :
"2016-08-02 19:38:43", "teachers" : [ { "facultyid" : "CS-102",
"subjectid" : "CS-ALGO" } ] }
私は$最初の文書のteachers
アレイ上のMgOを使用して操作を引くが、私はへの道を必要とする適用していました$unset
それが空になるとき。
現在、私はGoで回避策を作成していますが、回避策なしで逃げたいと思います。
私はここで何か非常に些細なことを逃していないことを願っています。
ありがとうございます!最初$pull
更新操作を行うためにfindAndModify()
APIを使用することをお勧めし
'$ pull'演算と一緒に' teachers'配列を1つのクエリで削除するか、2つのクエリを使用したいですか? – Shrabanee
削除機能の直後に、削除操作が実行された特定のセクションIDの 'teachers'配列が空であるかどうかを調べるには' mgo'の方法が必要です。多分 'mgo'が提供する関数ですが、配列のサイズを調べるために使うことができ、返されるサイズが0の場合は' $ unset'を呼び出すことができます(もう一度、mgoを使用します)。しかし、既存の場合、他のよりエレガントなソリューションも歓迎です:) –