MongoDB를 처음 접했고 MongoDB 문서를 읽었습니다. 나는 다음과 같은 구조를 가지고있다 : -MongoDB : 참조 된 문서 쿼리하기
public class User
{
[BsonId]
public long UserId { get; set; }
public string LoginId { get; set; }
public string Password { get; set; }
public List<string> Gateways { get; set; }
}
public class Gateway
{
[BsonId]
public string MACAddress { get; set; }
public string SerialNumber { get; set; }
public List<Device> Devices { get; set; }
}
게이트웨이가 USER의 부재 상태에서 별도의 존재를 가지고 있기 때문에 USER 문서의 참조 된 게이트웨이 MAC 주소.
var userQuery = Query<User>.EQ(u => u.UserId, aUserId);
var userCursor = mMongoUserCollection.Find(userQuery);
var gateways = mMongoGatewayCollection.AsQueryable<Gateway>().Where(g => userCursor.FirstOrDefault().Gateways.Contains(g.MACAddress));
그러나 다음과 같이 내 쿼리를 작성할 때
"Unable to determine Serialization Information for the expression: Enumerable.FirstOrDefault<User>"
는 그러나 모든 것이 잘
가는 것을 나는 예외를 얻고있다 - : 주어진UserId
에 대한 모든 게이트웨이를 얻기 위해 다음과 같이 나는 쿼리를 작성하고
var userQuery = Query<User>.EQ(u => u.UserId, aUserId);
var userCursor = mMongoUserCollection.Find(userQuery);
List<string> desiredGateways = userCursor.FirstOrDefault().Gateways;
var gateways = mMongoGatewayCollection.AsQueryable<Gateway>().Where(g => desiredGateways.Contains(g.MACAddress));
위의 두 가지 차이점을 알고 싶습니다.
대신 JOINS를 사용하거나 RDBMS를 사용하지 마십시오. MongoDB는 JOIN을하지 않습니다. 모든 데이터를 "게이트웨이"목록 요소에 완전히 삽입하십시오. 또는 각 문서가 유효한'_id' 값의'List' 만 포함한다는 것을 받아들입니다. 이 문제를 해결하기 위해 다른 쿼리를 제출할 수는 있지만 그렇게하는 것이 유일한 방법입니다. 또 다른 쿼리를 제출함으로써 .. –
@ Neil Lunn, 나는 당신의 요지를 얻었지만 내 게시물에서 편집 한 내 쿼리에 대한 견해를 제공하십시오. –