Как я могу получить элемент внутри массива / элемента по ObjectId - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть вопрос, который я не смог решить. У меня есть элемент Order с массивом Products внутри. Например:

{
    _id: ObjectId("5ea0bfa85422e4537478312f"),
    label: "Order 01",
    status: {
       _id: ObjectId("5ea0bfa85422e4537478311a"),
       actual: "Created",
    }
    products: [
        {
           _id: ObjectId("5ea0bfa85422e4537478312e"),
           description: "Product 1"
        },
        {
           _id: ObjectId("5ea0bfa85422e4537478312d"),
           description: "Product 2"
        }
    ]
},
{
    _id: ObjectId("5ea0bfa85422e4537478312c"),
    label: "Order 02",
    status: {
       _id: ObjectId("5ea0bfa85422e4537478311b"),
       actual: "Accepted",
    }
    products: [
        {
           _id: ObjectId("5ea0bfa85422e4537478312b"),
           description: "Product 3"
        },
        {
           _id: ObjectId("5ea0bfa85422e4537478312a"),
           description: "Product 4"
        }
    ]
}

Мои классы выглядят так:

public class Order
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }
    public string Label { get; set; }
}

public class Status
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }
    public string Actual { get; set; }
}

public class Product
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }
    public string Description { get; set; }
}

Я хочу выполнить запрос для возврата Заказ, содержащий указанный c Продукт или Статус по его ObjectId. Вот пример того, как я запрашиваю продукт 3:

//var query = "{Product.Description: 'Product 3'"}"; // it works
var query = "{Status.Id: '5ea0bfa85422e4537478311a' }";   // DIDN'T work
var query = "{Product.Id: '5ea0bfa85422e4537478312b'}";   // ALSO DIDN'T work
orders.Find(query).ToList(); 

Итак, как запросить эти заказы по внутреннему идентификатору элемента (Status) или по любому из элементов массива (Products).

1 Ответ

0 голосов
/ 25 апреля 2020

Вот как это делается в javascript

const query = `{"products":{ $elemMatch: { _id: ${Product.Id} } } }`;
orders.Find(query).ToList()

. Вы должны использовать $ elemMatch внутри "products", чтобы найти заказы, имеющие продукты с требуемым Id

. это помогает. https://docs.mongodb.com/manual/tutorial/query-array-of-documents/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...