2015-11-09 37 views
2

我正在测试Azure DocumentDb以决定是否应将数据库从MongoDB更改为doucmentDb。Azure DocumentDb - 查询空间数据

我们与MongoDB中10.000+位置,其中位置被保存为GeoJSON的数据库。所以移动我们的数据没有问题,但我如何使用.NET SDK中的linq提供程序查询我的数据?

我们有我们自己的实现,我们用我们的MongoDB使用GeoJSON的,所以我们没有兴趣在改变我们的数据模型依赖于.NET SDK提供的空间类。

有查询DocumentDb时使用LINQ提供自定义的空间类的方法吗?

+0

你有没有使用考虑node.js或它的.NET集成,edge.js?它更贴近您的MongoDB心智模型。在这种情况下,您将使用DocumentDB SDK作为node.js。没有Linq,但我创建了(sql-from-mongo)[https://www.npmjs.com/package/sql-from-mongo] npm包,以允许我对DocumentDB使用MongoDB查询语法。这可能更适合您的MongoDB背景。恕我直言,过度依赖C#,Java等面向对象与NoSQL(甚至是Microsoft的NoSQL,DocumentDB)的阻抗不匹配,服务器端JavaScript是一个完美契合。 –

+0

你能否提供你的班级定义? DocumentDB SDK中的包装类完全符合GeoJSON标准,并且只是为了方便序列化/反序列化 - 您应该能够使用与MongoDB相同的GeoJSON,而无需进行更改。 –

+0

我们已经创建了我们自己的GeoJSON类,我们在我们的类中使用了这些类,并且我们能够将它们保存到DocumentDb中而没有任何问题。问题是当我们试图用linq查询它们时,我们无法使用空间linq查询,因为我们的模型使用我们自己的GeoJSON类。 – eNepper

回答

3

DocumentDB最近增加了支持空间数据类型,并原生支持GeoJSON的标准:https://azure.microsoft.com/en-us/blog/announcing-geospatial-support-in-azure-documentdb/

下面是一个使用LINQ做空间查询在DocumentDB的例子:

// An example document with spatial data 
public class MyDocument 
{ 
    public string Id { get; set; } 
    public Microsoft.Azure.Documents.Spatial.Point Location { get; set; } 
} 

// An example distance query - get all documents within 30 km of a given point 
client.CreateDocumentQuery<MyDocument>(collection.SelfLink) 
    .Where(x => x.Location.Distance(new Point(32.33, -4.66)) < 30000))