2

Мне нужно получить данные из mongoDB с помощью Powershell. Предположим, у меня есть коллекция db.orders и вам нужно получить только заказы, созданные на прошлой неделе, и получить только определенные столбцы, например, поля _id, status, createdAt.Как сделать comlex-запрос MongoDB с Powershell

Приказов коллекции схемы

{ 
"_id": ObjectId("56cf9bab78e9fd46ec557d69"), 
"status" : "ordered", 
    ... 
"total": 343, 
"createdAt": ISODate("2016-01-15T17:29:09.342Z") 
} 

Я запрашиваю его в Монго оболочка, как этот

db.orders.find({ 
    "createdAt" : { 
    $lt: new Date(), 
    $gte: new Date(new Date().setDate(new Date().getDate()-7)) 
    } 
}, {_id: 1, status: 1, createdAt: 1 }) 

Но мне нужно сделать это в Powershell, вот мой Powershell скрипт с простым запросом, который экстрагировать точно createdAt дата .. нет диапазон дат

$mongoDbDriverPath = "C:\mongodb\bin" 
$dbName = "Orders" 
$collectionName = "orders" 
Add-Type -Path "$($mongoDbDriverPath)\MongoDB.Bson.dll" 
Add-Type -Path "$($mongoDbDriverPath)\MongoDB.Driver.dll" 
$db =[MongoDB.Driver.MongoDatabase]::Create("mongodb://localhost:27017/$($dbName)") 
$collection = $db[$collectionName] 

$query = [MongoDB.Driver.Builders.Query]::EQ("createdAt","2016-01-15T17:29:09.342Z") 

$results = $collection.find($query) 

В MongoDB .NET Драйвер api, I не могут делать сложный запрос или, по крайней мере, не знают, как это сделать. Я могу запросить в соответствии с одним конкретным столбцом, но не сделать сложным и не может ограничить вывод для некоторых полей.

Пожалуйста, сообщите, если кто знает, как это сделать. Примечание: это не проект .Net, он просто использует драйвер mongoDB .net, но выполняется в Powershell.

+0

какую версию драйвера вы используете? – profesor79

+0

В настоящее время используется 1.7.0.4714 – Markus

+0

ok, у меня были проблемы с запуском этого на 2.2.3 :-) - завтра будет выглядеть, как это хорошая штука, чтобы взломать – profesor79

ответ

0

пожалуйста найти решение ниже: Это гибкий код, используя C# внутри Powershell сценария и последние версии драйверов Монго (2.2.3) - так что вы можете играть с C# код как требуется :-)

$mongoDbDriverPath = "C:\work\mongo" 
$dbName = "deser" 
$collectionName = "Foo" 
$Assem = ("$($mongoDbDriverPath)\MongoDB.Bson.dll", "$($mongoDbDriverPath)\MongoDB.Driver.dll","$($mongoDbDriverPath)\MongoDB.Driver.Core.dll") 

$Source = @” 
namespace profesor79 
{ 
    using System.Collections.Generic; 

    using MongoDB.Bson; 
    using MongoDB.Bson.Serialization.Attributes; 
    using MongoDB.Driver; 

    public static class Executor 
    { 
     public static List<Foo> GetData() 
     { 
      var connectionString = "mongodb://localhost:27017"; 
      var _client = new MongoClient(connectionString); 
      var _database = _client.GetDatabase("deser"); 
      var cole = _database.GetCollection<Foo>("Foo"); 
      cole.InsertOne(new Foo()); 

      var data = cole.Find<Foo>((new BsonDocument())).ToList(); 
      return data; 
     } 

     public class Foo 
     { 
      public ObjectId Id { get; set; } 
      [BsonDictionaryOptions] 
      public Dictionary<string, string> Bar = new Dictionary<string, string>() { { "1", "text" }, { "2", "text" } }; 

     } 
    } 
} 


"@ 

Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp 

[profesor79.Executor]::GetData() 

см Скриншот:

enter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^