Arrays 当我运行过滤器时,MongoDB Compass返回所有行

Arrays 当我运行过滤器时,MongoDB Compass返回所有行,arrays,mongodb,mongodb-compass,Arrays,Mongodb,Mongodb Compass,我试图在MongoDB Compass中运行一个过滤器,它返回所有行,而不是我要查找的行。我可以在与我的数据库类似的示例数据库上运行过滤器,而不会出现任何问题 下面是我用来添加记录并从中选择的代码 public class NoSQLDataAccess { // Create an instance of data factory public NoSQLDataFactory noSQLDataFactory; public List<dynamic> D

我试图在MongoDB Compass中运行一个过滤器,它返回所有行,而不是我要查找的行。我可以在与我的数据库类似的示例数据库上运行过滤器,而不会出现任何问题

下面是我用来添加记录并从中选择的代码

public class NoSQLDataAccess
{
    // Create an instance of data factory
    public NoSQLDataFactory noSQLDataFactory;
    public List<dynamic> DocumentDetails { get; set; }
    private IMongoCollection<dynamic> collection;
    private BsonDocument bsonDocument = new BsonDocument();

    public NoSQLDataAccess() { }
    public void TestNoSQL()
    {
        MongoClient client;
        IMongoDatabase database;
        string connectionString = ConfigurationManager.AppSettings["NoSQLConnectionString"];
        client = new MongoClient(connectionString);
        database = client.GetDatabase("TestDatabase");
        collection = database.GetCollection<dynamic>("TestCollection");
        // Insert
        List<Layer> layers = new List<Layer>();
        layers.Add(new Layer { LayerId = 117368, Description = "BOOTHLAYER" });
        layers.Add(new Layer { LayerId = 117369, Description = "DRAWINGLAYER" });
        layers.Add(new Layer { LayerId = 117370, Description = "LAYER3" });
        List<Element> elements = new List<Element>();
        elements.Add(new Element { ElementId = 9250122, Type = "polyline" });
        elements.Add(new Element { ElementId = 9250123, Type = "polyline" });
        List<dynamic> documentDetails = new List<dynamic>();
        documentDetails.Add(new DrawingDTO { Layers = layers, Elements = elements });
        collection.InsertMany(documentDetails);
        List<FilterDetails> filterDetails = new List<FilterDetails>();
        filterDetails.Add(new FilterDetails { Type = "layers.id", Value = "117368" });
        foreach (FilterDetails detail in filterDetails)
        {
            bsonDocument.Add(new BsonElement(detail.Type, detail.Value));
        }
        List<dynamic> results = collection.Find(bsonDocument.ToBsonDocument()).ToList();
    }
}
我已经能够使用MongoDB shell获得我所需要的结果,但是我无法在C中复制结果

以下是MongoDB shell中的解决方案:


TestCollection.find{layers.id:117368},{u id:0,layers:{$elemMatch:{id:117368}}}.pretty

我找到了一篇与我的问题类似的帖子,对他们很有用。我附加的C代码是在我让它正常工作后如何访问它。我使用MongoDB Compass测试查找/插入/更新/删除


欢迎@Tom,请提供一些帮助澄清问题的信息。MongoDB Compass的发布版本似乎不支持$elemMatch投影。这正是我试图获得所需数据的原因。