我有一个类型的变量Dictionary<MyType, List<MyOtherType>>
我想将它转换为Lookup<MyType, MyOtehrType>
.
我想首先使用Lambda函数,展平字典,然后使用ToLookup()
.将其转换为Lookup .我被困在字典里.我想过使用SelectMany却无法使用它.任何人都知道该怎么做?
我有两个系列
用户
{
"_id" : ObjectId("584aac38686860d502929b8b"),
"name" : "John"
}
Run Code Online (Sandbox Code Playgroud)角色
{
"_id" : ObjectId("584aaca6686860d502929b8d"),
"role" : "Admin",
"userId" : "584aac38686860d502929b8b"
}
Run Code Online (Sandbox Code Playgroud)我想基于userId(在角色集合中) - _id(在用户集合中)加入这些集合.
我尝试了以下查询:
db.role.aggregate(
{
$lookup:
{
from: 'user',
localField: 'userId',
foreignField: '_id',
as: 'output'
}
}
);
Run Code Online (Sandbox Code Playgroud)
只要我将userId存储为ObjectId,这就给了我预期的结果.当我的userId是一个字符串时,没有结果.Ps:我试过了
foreignField:'_ id'.valueOf()
和
foreignField:'_ id'.toString()
.但是基于ObjectId-string字段匹配/加入没有运气.
任何帮助将不胜感激.
有没有办法要求.ToLookup
LINQ提供的功能有多个键?
我承认起初这似乎不直观,我期待没有实际的方法来做到这一点,但我希望有人知道一种方式.
我基本上希望能够通过两个值进行查找,例如a string
和an int
,并使用这两个值检索对象.
public class MyClass {
public string StringProp {get;set;}
public int IntProp {get;set;}
public object MoreData {get;set;}
}
public class Main {
public void Main() {
HashSet<MyClass> set = new HashSet<MyClass>();
set.Add(new MyClass {StringProp = "a", IntProp = 1, MoreData = null});
set.Add(new MyClass {StringProp = "c", IntProp = 4, MoreData = new object()});
set.Add(new MyClass {StringProp = "a", IntProp = 2, MoreData = "upupdowndown"});
set.Add(new MyClass {StringProp = "c", IntProp …
Run Code Online (Sandbox Code Playgroud) 与之不同Dictionary
,您无法Lookup
通过逐个添加元素来构造.你碰巧知道原因吗?
Lookup
就像multimap
在C++中一样; 为什么我们不能在C#中修改它?如果我们真的不能,我们如何multimap
在C#中构建数据结构?
我很好奇是否有类似于c ++中的Java哈希集的东西.即具有快速外观的数据结构,因为我只会在其上运行.contains(e).同样,如果您可以启发我如何对您提出的任何数据结构执行.contains(),我将非常感激.哦,请不要发布只是看看c ++文档,因为我已经这样做了,发现它们很麻烦.
我正在阅读范围和关闭你不知道Kyle Simpson的JS书,特别是这个主题Compiler Speak.
他们在那里提到了LHS和RHS查询.我无法理解这两个术语,任何人都可以帮助我实现它们吗?
如何在C++中重写以下伪代码?
real array sine_table[-1000..1000]
for x from -1000 to 1000
sine_table[x] := sine(pi * x / 1000)
Run Code Online (Sandbox Code Playgroud)
我需要创建一个sine_table查找表.
在R中,我有,例如:
> foo <- list(a=1,b=2,c=3)
Run Code Online (Sandbox Code Playgroud)
如果我打字foo
,我得到:
$a
[1] 1
$b
[1] 2
$c
[1] 3
Run Code Online (Sandbox Code Playgroud)
如何查看foo
仅获取"密钥"列表?在这种情况下,(a,b,c).
当我想确保我想要使用的条目存在时,我通常会这样做.
#include <unordered_map>
struct type { int member; };
std::unordered_map<type> map;
if (map.find(key) != map.end())
map[key].member = 42;
Run Code Online (Sandbox Code Playgroud)
但是,我认为它key
在哈希映射中执行两次查找.这会缓存查找.
#include <unordered_map>
struct type { int member; };
std::unordered_map<type> map;
auto find = map.find(key);
if (find != map.end())
find->second.member = 42;
Run Code Online (Sandbox Code Playgroud)
第一种选择感觉更具表现力.它真的慢吗?
我想$lookup
在mongodb中添加联接集合.我正在尝试如下
{
$lookup:{
from:"User",
localField:"assignedId",
foreignField:"_id",
as:"dataa"}
}
Run Code Online (Sandbox Code Playgroud)
现在我有两个系列
用户包含objectid
的用户喜欢 "_id" : ObjectId("56ab6663d69d2d1100c074db"),
和 任务,其中包含assignedId
为string
"assignedId":"56ab6663d69d2d1100c074db"
现在,当在两个集合中应用$ lookup时它不起作用,因为Id不匹配.
为此,我用Google搜索并找到了一个包含的解决方案
{ $project: { assignedId: {$toObjectId: "$assignedId"} }}
但这个解决方案不适合我,它抛出一个错误:
assert: command failed: { "ok" : 0, "errmsg" : "invalid operator '$toObjectId'", "code" : 15999 } : aggregate failed
Run Code Online (Sandbox Code Playgroud)
请帮助我如何解决此问题.
谢谢
lookup ×10
c++ ×3
dictionary ×3
c# ×2
join ×2
mongodb ×2
.net ×1
javascript ×1
linq ×1
list ×1
objectid ×1
performance ×1
pseudocode ×1
r ×1
trigonometry ×1