我在mongodb中有一个文档,我需要更新2层深度嵌套的对象数组,如下所示:
{
id: 1,
items: [
{
id: 2,
blocks: [
{
id: 3
txt: 'hello'
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
如果只有一个级别的深度数组,我可以使用位置运算符来更新其中的对象,但对于第二级,我唯一的选择是使用位置运算符和嵌套对象的索引,如下所示:
db.objects.update({'items.id': 2}, {'$set': {'items.$.blocks.0.txt': 'hi'}})
Run Code Online (Sandbox Code Playgroud)
这种方法有效,但对我来说似乎很危险,因为我正在构建一个Web服务,索引号应该来自客户端,它可以发送100000作为索引,这将迫使mongodb创建一个具有空值的100000索引的数组.
有没有其他方法来更新这样的嵌套对象,我可以引用对象的ID而不是它的位置,或者可能是在查询中使用它之前检查提供的索引是否超出范围的方法?
有没有办法观察将由Query?生成的SQL语句?
例如,我有这个:
val q = actions.filter(v => v.actionHash === hash && v.carriedAt > past)
我可以查看其底层原始SQL吗?
我想每秒调用一个任意函数n.基本上我想SetInterval从Javascript中获得相同的东西.我怎样才能在Scala中实现这一目标?
我打算使用Scala和Akka构建一个服务,它将严重依赖于电子邮件.事实上,与我的服务进行的大多数沟通都将通过发送信件并获得回复来完成.我想这意味着我需要一个可靠的电子邮件服务器以及与Scala通信的方式.
问题是,这样做的最佳做法是什么?我应该选择哪种电子邮件服务器以及用于完成此任务的Scala解决方案?
我有这个简单的课程:
public class DataBag
{
public string UserControl { get; set; }
public string LoadMethod { get; set; }
public dynamic Params { get; set; }
public int Height { get; set; }
public DataBag(string Control,
object vars, string lm)
{
UserControl = Control;
LoadMethod = lm;
Params = vars;
Height = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我想为它创建一个装饰器,它会添加一堆自己的属性.问题是提供访问装饰属性的最简洁和优雅的方法是什么?
到目前为止,我有两个选择:要么我提供了一个get-set在装饰一对,每四个装饰性(至极似乎tideous和拗口,基本上这是我想避免的)或我继承DataBag的DynamicObject,然后以某种方式管理使用获得装饰性TryGetMember方法(这是动态的,似乎不是在C#中做事的正确方法.
有什么建议?
我已经创建了一个合适的BoradcastReceiver,注册它Manifest.xml,这是我的问题:如果我的应用程序已经启动并挂在后台,那么拨打一个数字会把它带到前面.如果尚未启动,则拨打号码将无效.
我怎样才能解决这个问题?如果这很重要的话,我会在小米Mi4上用MIUI6进行测试.
这是代码(我使用Scala):
manifest.xml文件:
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
...
<receiver android:name="DialerGate" android:enabled="true" android:exported="true">
<intent-filter android:priority="1">
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
广播接收器:
class DialerGate extends BroadcastReceiver {
def onReceive(context: Context, intent: Intent) =
if (intent.getAction equals Intent.ACTION_NEW_OUTGOING_CALL) {
val phoneno = intent.getExtras getString Intent.EXTRA_PHONE_NUMBER
val prefs = context.getSharedPreferences("prefs", Context.MODE_PRIVATE)
val number = prefs.getString(AbstractKit.LAUNCH_NUMBER, null)
Log.d("WALLET-PHONE", s"Dialed number: $phoneno, saved number: $number")
Log.d("WALLET-PHONE-OK", (number == phoneno).toString)
val i = new Intent
i.setClassName("com.app.wallet", "com.app.wallet.MainActivity")
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)
val appContext = …Run Code Online (Sandbox Code Playgroud) 我有两个JToken代表JSON对象数组,我想合并它们.JToken有一个方法,但当我尝试使用它时Concat它会产生null结果.
Action<JToken> Ok = (x) =>
{
Debug.WriteLine(x);
/* outputs
[
{
"id": 1,
},
{
"id": 2,
}
]
*/
x = (x).Concat<JToken>(x) as JToken;
Debug.WriteLine(x); // null
};
Run Code Online (Sandbox Code Playgroud)
我怎样才能使它工作?
**kwargs在C#中是否存在某种类似Python的东西?我希望能够将可变数量的命名参数传递给functon,然后将它们作为类似于字典的内部函数并循环遍历它们.
我有一个UserControl需要在顶部和LongListSelector下面包含一堆控件.整体的总高度UserControl可能(并且几乎总是会)超过屏幕高度,在这种情况下,整体UserControl必须是可滚动的.
我目前的设置如下:
<staff:UserContentControl
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:MyApp.Controls"
xmlns:staff="clr-namespace:MyApp.Helpers"
x:Class="MyApp.Controls.RemoteHomePage"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}">
<ScrollViewer>
<ScrollViewer.Content>
<StackPanel>
<TextBlock Txt="Text1" Sign="@" />
<TextBlock Txt="Text2" Sign="#" />
<controls:Divider />
<TextBlock Txt="Text3" Sign="~" />
<TextBlock Txt="Text4" Sign="~" />
<controls:TextDivider Text="Divider text" />
<phone:LongListSelector ItemsSource="{Binding Items}">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title}" />
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
</StackPanel>
</ScrollViewer.Content>
</ScrollViewer>
</staff:UserContentControl>
Run Code Online (Sandbox Code Playgroud)
这个解决方案满足了我的需求,但也存在一个很大的问题:LongListSelector当它包含的项目数量相当大时,目前需要花费很多时间来加载.处理300个项目需要8秒钟,在此期间整个UI都被阻止.如果我删除所有内容,但是LongListSelector,如下:
<staff:UserContentControl
...>
<phone:LongListSelector ItemsSource="{Binding Items}">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding …Run Code Online (Sandbox Code Playgroud) 在我LongListMultiSelector,我如何在项目之间设置一个垂直空间,使其不被选择矩形覆盖?只需在下面的XAML中添加一个边距,就会有矩形覆盖的边距.
<toolkit:LongListMultiSelector ItemsSource="{Binding Items}">
<toolkit:LongListMultiSelector.ItemTemplate>
<DataTemplate>
<TextBlock Text="Some Text" Margin="0,0,0,50" />
</DataTemplate>
</toolkit:LongListMultiSelector.ItemTemplate>
</toolkit:LongListMultiSelector>
Run Code Online (Sandbox Code Playgroud)
我尝试选择项目时显示其行为方式的图片.(注意蓝色矩形)

下面是一个标准邮件应用程序的示例,其中项目有一些空间,但选择矩形不覆盖它.(这就是我要的)
