gpt4 book ai didi

c# - MongoDB 中的关系(使用 .Net)

转载 作者:可可西里 更新时间:2023-11-01 10:36:26 27 4
gpt4 key购买 nike

在 mongoDB 中是否有使用 .Net 创建某种等同于“SQL-Join”的东西?我已经阅读了有关关系的 MongoDB 文档 ( https://docs.mongodb.com/manual/tutorial/model-referenced-one-to-many-relationships-between-documents/ ).. 据我了解,您只需通过引用它们的 ID 添加关系。然而..这是否也意味着对于每个关系您还需要执行一个额外的查询?..

最佳答案

考虑如下最简单的关系:

db.publishers.save({
_id: "oreilly",
name: "O'Reilly Media",
founded: 1980,
location: "CA"
})

db.books.save({
_id: 123456789,
title: "MongoDB: The Definitive Guide",
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
publisher_id: "oreilly"
})

在 MongoDB 中,您可以使用 $lookup 运算符在一个查询中从两个集合中获取数据:

db.books.aggregate([
{
$lookup: {
from: "publishers",
localField: "publisher_id",
foreignField: "_id",
as: "publisher"
}
}
])

返回:

{ 
"_id" : 123456789,
"title" : "MongoDB: The Definitive Guide",
"author" : [ "Kristina Chodorow", "Mike Dirolf" ],
"published_date" : ISODate("2010-09-24T00:00:00Z"),
"pages" : 216,
"language" : "English",
"publisher_id" : "oreilly",
"publisher" : [ { "_id" : "oreilly", "name" : "O'Reilly Media", "founded" : 1980, "location" : "CA" } ]
}

使用 MongoDB .NET 驱动程序,您可以使用 LINQ 语法和 join 运算符,它们将被翻译成 $lookup:

var books = db.GetCollection<Book>("books");
var publishers = db.GetCollection<Publisher>("publishers");

var q = from book in books.AsQueryable()
join publisher in publishers.AsQueryable() on
book.publisher_id equals publisher._id
select new
{
book,
publisher = publisher
};

var result = q.ToList();

$unwind 转换成 $lookup 这样你就可以得到一个 publisher 对象而不是数组

关于c# - MongoDB 中的关系(使用 .Net),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56414569/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com