6

バックグラウンド:

私が達成する必要があるのは、レコードの特定の配列がnullまたは空の場合に、コレクション内のすべてのレコードを削除することです。

null配列を見つけるためのC#ドライバークエリは次のとおりです。

IMongoQuery query = Query.Exists("myArray", false);

これはnull配列を検出するのに問題ありませんが、配列がnullにならない場合もありますが、要素はありません。私が必要としているのはもっと似ています:

// Note: second subquery will not work
IMongoQuery query = Query.Or(
    Query.Exists("myArray", false),
    Query.IsEmpty("myArray", false) // error
);

モデル:

私のクラスは次のようになります。

public class MyClass
{
    // This property may be null or empty
    [BsonElement("myArray")]
    public string[] MyArray { get; set; }

    [BsonElement("someElement")]
    public int SomeElement{ get; set; }

}

概要:

  1. 配列が空の場合にクエリを実行するには、どのC#ドライバーメソッドを使用する必要がありますか?
  2. または、配列がnullまたは空かどうかを確認するための最良の方法は何ですか?

これに関する助けをいただければ幸いです。:)

4

4 に答える 4

14

$size演算子を探しています。

Query.Size("myArray", 0)配列が空の場合はtrueになります。

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size

于 2012-06-13T21:02:45.543 に答える
5

$ examplesは、存在しないフィールドにのみ一致します。フィールドが存在するが、その値がnull(BSON null)の場合、それらのフィールドは$existsと一致しません。http://docs.mongodb.org/manual/reference/operator/query/exists/

ただし、フィールド値をnullと照合することは、どちらの場合も一致します。フィールドが存在せず、フィールド値もnullです。http://docs.mongodb.org/manual/faq/developers/#faq-developers-query-for-nulls

したがって、この場合。次の2つの基準でOR条件である必要があります。1。フィールド:null2.フィールドサイズ=0;

{"$ or":[{"MyArray":{"$ size":0}}、{"MyArray":null}]}

于 2014-02-19T05:08:20.693 に答える
5

$size インデックスは使用できず、インデックスに関連する制限$orもいくつかあることに注意してください。$orと$sizeの制限を回避しながら、空の配列または設定されていない配列を持つドキュメントをクエリするための良い方法は、次のとおりです。そしてそれも短いです!:)

{myArray: {$in: [null, []]}}

于 2017-11-09T03:33:23.873 に答える
3

MongoDbコレクションで空白の配列フィールドを見つけるには、Mongoシェルで次のクエリを使用します db.COLLECTION.find({ myArray: [] }).pretty();

COLLECTIONをDBコレクション名に変更します。

于 2015-04-10T06:50:58.680 に答える