1

MongoDB が実行に失敗するこの連鎖 LINQ クエリがあります。

RoleCollection.AsQueryable().Where(r => r.Users.Any(id => id == user.Id))
    .Select(r => r.Name).ToArray();

これにより、次のエラーが発生します。

Any is only support for items that serialize into documents. The current serializer is ObjectIdSerializer and must implement IBsonDocumentSerializer for participation in Any queries. 

クエリを Mongo がサポートするネイティブ クエリに変換するにはどうすればよいですか?

4

2 に答える 2

1

次のクエリが機能するようになりましたが、そのセマンティクスについてはまだ完全にはわかりません。

RoleCollection.Find(new QueryDocument("Users", user.Id))
            .Select(r => r.Name).ToArray();
于 2013-01-21T23:40:58.540 に答える
1

次のように、 と長さチェック.Any()の組み合わせに置き換えることができるはずです。.Where()

RoleCollection.AsQueryable().Where(r => r.Users.Where(id => id == user.Id).Length > 0)
    .Select(r => r.Name).ToArray();

ただし、すべてのユーザーを引き戻しidて長さを調整するため、ここにはパフォーマンスへの影響があることに注意してください。

Mongo が何をサポートしているかはわかりません (申し訳ありませんが、純粋にの観点から回答しています) 。1つまたは何も期待していないので、それはより良いかもしれません:FirstOrDefaultnull

RoleCollection.AsQueryable().Where(r => r.Users.FirstOrDefault(id => id == user.Id) != null)
    .Select(r => r.Name).ToArray();
于 2013-01-21T22:59:09.150 に答える