如何使用切片操作员并指定字段以通过查找查询返回



我有这个集合:

Books
[
{
  _id: ObjectId(1),
  Title: Book1,
  Price: 100,
  Tags: ["A", "B", "C"] 
},
{
  _id: ObjectId(2),
  Title: Book2,
  Price: 200,
  Tags: ["C", "D", "E"] 
}
]
I want to return only _id field and the first element from the Tags array
So my result should look like this:
Books
[
{
  _id: ObjectId(1),
  Tags: ["A"] 
},
{
  _id: ObjectId(2),
  Tags: ["C"] 
}
]

标签数组可以很大,我只需要知道第一个位置是什么。

var query = Query.EQ(<My condition here>);
var slice = Fields.Slice("Tags", 1);
return Books.FindAs<MyBookClass>(query).SetFields(slice).ToList(); <- Selects all fields from the document
return Books.FindAs<MyBookClass>(query).SetFields(slice).SetFields("_id", "Tags").ToList(); <- I am get _id but I also everything from the Tags array
This works nicely in command shell. How do I implement this using CSharp driver?
> db.Books.find({ "Price" : 100},{Tags:{$slice:1}, _id:1})

有没有办法指定我要阅读的切片和字段?

下面对我有用,在蒙古塞尔的javascript本地代码中。

您可以转化为C#

db.books.find({},{"Tags":{$slice:1},_id:1})

编辑

这个呢?

var query = Query.EQ(<My condition here>);
var slice = Fields.Slice("Tags", 1);
var fields = Fields.Include("_id","Tags"); 
return Books.FindAs<MyBookClass>(query).SetFields(fields).SetFields(slice).ToList(); 

最新更新