我有以下的用戶對象:MongoDB的限制領域和切片投影一起
{
"_id" : ObjectId("someId"),
"name" : "Bob",
"password" : "fakePassword",
"follower" : [...],
"following" : [..]
}
我需要分頁在跟蹤器列表,所以我用切片投影算,但我只需要分頁的追隨者名單被退回。而且我不知道我是否以錯誤的方式進行,或者這不能完成,但限制字段不適用於切片投影。
以下是幾個查詢我想:
collection.findOne(
{
_id: new ObjectId(userId)
},
{
follower: {$slice:[skip, parseInt(pageSize)]},
follower: 1
},..
和
collection.findOne(
{
_id: new ObjectId(userId)
},
{
follower: 1,
follower: {$slice:[skip, parseInt(pageSize)]}
},
但這些返回的對象中的所有值,並且不限制的領域,雖然,切片工程在這兩種情況下罰款。 另外,當我做了類似_id:0,following:0
的工作時,這部分工作,但我不想在這樣的查詢中提及每個字段,一旦我決定更改模式,它可能會產生問題。 我如何得到這個工作,可能是什麼語法的查詢來得到這個工作.. ??
所以,就像在你的答案,你必須確定你需要刪除的所有字段,但根據MongoDB的文檔,你可以也只是指定你需要的字段,比如'followers:1',這樣只會給我跟隨者字段和_id字段,而且我不必指定其他我不需要的字段。我需要這個與切片投影算子一起工作。 –
@SambhavSharma如果這是你真正的問題,那麼我會愉快地提交文檔補丁(已經是貢獻者),但沒有這個實際上不以這種方式工作。您需要明確排除使用'$ slice'時不需要的所有字段。你也不能在'.find()'中混合包含和排除,如果你需要這種複雜性,那麼你可以使用['.aggregate()'](http://docs.mongodb.org/manual/reference/method/db。 collection.aggregate /)替換爲[**'$ project' **](http://docs.mongodb.org/manual/reference/operator/aggregation/project/)運算符。 –